簡體   English   中英

將兩列的不同值與pandas進行比較

[英]compare distinct values of two column with pandas

我用這個簡單的DataFrame來玩一下。


     A   B
0   123 abc
1   123 abc
2   123 def
3   456 def
4   456 def

我想檢查列B中每個不同值的列B的值是否始終相同。例如,列A中的“123”始終專門對應於列B中的“abc”。

這是我到目前為止所嘗試的:

df2 = df[['A','B']].drop_duplicates()
df[(df['A'] == df2['A']) & (df['B'] == df2['B'])].values

但我得到一個錯誤,因為DataFrames的索引不一樣。

然后我嘗試使用列表但沒有成功。

test=list(set(df['A']))
for l in test:
    df[df.A== l].B.drop_duplicates()

在像我使用過的那個小型DataFrame中很容易看到,但是如何在更大的DataFrame中輕松檢查它,並說43K條目?

編輯

感謝答案,我知道我可以過濾多個這樣的組合:

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'的情況。

是否有捷徑可尋?

試試:

df.groupby('A').agg({'B': pd.Series.nunique})

要么,

df.groupby('A')['B'].nunique()

正如文本所提到的,如果B的數量超過1,那么就有多種組合。

UPDATE

要過濾具有多個計數的組合,您可以使用filter():

df.groupby('A').filter(lambda x: x['B'].nunique()> 1)
df.groupby(['A',"B"]).filter(lambda x : len(x)==1)

和輸出將是

    A   B
2   123 def

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM