我有这个数据作为例子。我需要检查哪些 a
值具有 b
的所有对应值。例如,哪个 a
具有所有 [1,2]
对应的 b
值。
In [1]:
df = pd.DataFrame( {'a':['A','A','A','B','B','B','C','C'], 'b':[1,2,3,2,3,4,1,2]})
df
Out[1]:
a b
0 A 1
1 A 2
2 A 3
3 B 2
4 B 3
5 B 4
6 C 1
7 C 2
所以对于这个例子我想返回一个列表
a
0 A
1 C
或
['A', 'B']
首先,我认为我应该为每个 a
生成一个 b
值列表
In [2]:
df1 = df.groupby('a')['b'].apply(list).reset_index(name='b_list')
df1
Out[2]:
a b_list
0 A [1, 2, 3]
1 B [2, 3, 4]
2 C [1, 2]
假设这是正确的第一步,下一步我应该做什么?
我非常感谢仅使用 pandas
提供的工具的解决方案
最佳答案
使用数据透视表:
df.pivot('a','b','a').dropna(subset=[1,2]).index
或者使用groupby:
df.groupby('a').b.apply(lambda x: set(x.tolist()).issuperset([1,2]))
或者如果您需要将其放在列表中:
(
df.groupby('a')
.b.apply(lambda x: set(x.tolist()).issuperset([1,2])).loc[lambda x: x]
.index.tolist()
)
关于python - 检查列中的值是否是另一个数组的超集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59949165/