Python/Pandas -识别一列中与另一列中完全相同的唯一值相匹配的唯一值

watbbzwu  于 2022-12-21  发布在  Python
关注(0)|答案(1)|浏览(176)

我对 Dataframe 还是个新手,我正在尝试识别一列中的唯一值与另一列中的唯一值完全相同。例如,如果列“A”中的元素“a”在列“B”中具有唯一值“x”、“y”和“z”,我如何找到列“A”中也具有唯一值“x”、“y”和“z”的其他元素?和B栏的z
这篇文章中的解决方案让我成功了一半,但仍然需要手动分析才能检索到这些信息:Pandas, for each unique value in one column, get unique values in another column
将此解决方案应用于以下示例:

import pandas as pd

df1 = pd.DataFrame({
'name': ['John', 'Jane', 'John', 'Bill', 'Sue', 'Fred', 'Bill'],
'response': [23, 29, 21, 21, 34, 18, 23]})

print(df1.groupby('name').apply(lambda x: 
x['response'].sort_values().unique()).reset_index())

生成以下结果:

name         0
0  Bill  [21, 23]
1  Fred      [18]
2  Jane      [29]
3  John  [21, 23]
4   Sue      [34]

我想找到一个解决方案来确定比尔和约翰有相同的React。
谢谢大家!
P.S.任何关于如何重命名输出中的“0”列的建议都将不胜感激!

7lrncoxx

7lrncoxx1#

您已经基本上得到了它,只需要对列值进行一点修改,这样您就不会在下一次迭代中得到与第一次迭代类似的错误。

import pandas as pd

df = pd.DataFrame({
'name': ['John', 'Jane', 'John', 'Bill', 'Sue', 'Fred', 'Bill'],
'response': [23, 29, 21, 21, 34, 18, 23]})

df.groupby('name').apply(lambda x: x['response'].sort_values().unique()).reset_index().rename(columns={0:'response'})

#consolidate values while keeping seperator, so you can iterate again error free
df.response = [str(list(x)) for x in df.response]

出局

|    | name   | response   |
|---:|:-------|:-----------|
|  0 | Bill   | [21, 23]   |
|  1 | Fred   | [18]       |
|  2 | Jane   | [29]       |
|  3 | John   | [21, 23]   |
|  4 | Sue    | [34]       |

现在再做一次迭代,与之前类似

df.groupby('response').apply(lambda x: x['name'].sort_values().unique()).reset_index().rename(columns={0:'name'})

|    | response   | name            |
|---:|:-----------|:----------------|
|  0 | [18]       | ['Fred']        |
|  1 | [21, 23]   | ['Bill' 'John'] |
|  2 | [29]       | ['Jane']        |
|  3 | [34]       | ['Sue']         |

相关问题