我用这个简单的DataFrame玩了一点。
A B
0 123 abc
1 123 abc
2 123 def
3 456 def
4 456 def
我想检查B列的值对于A列中的每个不同值是否始终相同。例如,A列中的“ 123”必须始终与B列中的“ abc”相对应。
这是我到目前为止尝试过的:
df2 = df[['A','B']].drop_duplicates()
df[(df['A'] == df2['A']) & (df['B'] == df2['B'])].values
但是我得到一个错误,因为数据帧的索引不同。
然后我尝试使用列表,但没有成功。
test=list(set(df['A']))
for l in test:
df[df.A== l].B.drop_duplicates()
在一个像我使用过的小型DataFrame中,它很容易看到,但是如何在一个较大的DataFrame中(例如说有43000个条目)轻松地对其进行检查?
编辑
多亏了答案,我知道我可以过滤这样的多种组合:
df.groupby('A').filter(lambda x: x['B'].nunique()> 1)
不幸的是,此解决方案返回了
A B
0 123 abc
1 123 abc
2 123 def
我只需要类似
的输出 A B
0 123 def
查找那些'123'不完全对应于'abc'的情况。
有一种简单的方法吗?
答案 0 :(得分:0)
尝试:
df.groupby('A').agg({'B': pd.Series.nunique})
或
df.groupby('A')['B'].nunique()
如Wen-Ben所述,如果B的数量大于1,则存在多个组合。
更新
要过滤具有多个计数的组合,可以使用filter():
df.groupby('A').filter(lambda x: x['B'].nunique()> 1)
答案 1 :(得分:0)
df.groupby(['A',"B"]).filter(lambda x : len(x)==1)
输出将是
A B
2 123 def