比较两列与熊猫的不同值

时间:2019-03-22 16:14:47

标签: python pandas dataframe

我用这个简单的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'的情况。

有一种简单的方法吗?

2 个答案:

答案 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