说我有一个看起来像这样的表:
A B
1 bull
1 bull
1 pug
1 bull
2 pug
2 pug
3 dane
3 dane
4 shepherd
我正在寻找一种衬纸,以删除带有冲突标签的行。在上述情况下,标记为1的行将被删除,而其他行则与重复项无关。我当前的尝试是几行,并且在某些情况下失败。
答案 0 :(得分:2)
我将nunique
与transform
一起使用
df[df.groupby('A').B.transform('nunique')==1]
A B
4 2 pug
5 2 pug
6 3 dane
7 3 dane
8 4 shepherd
您还可以使用groupby
和nunique
,将唯一计数为1的行保留。
df[df.A.map(df.groupby('A').B.nunique()).eq(1)]
A B
4 2 pug
5 2 pug
6 3 dane
7 3 dane
8 4 shepherd
答案 1 :(得分:1)
我喜欢将.filter
用于此类问题:
from io import StringIO
import pandas
data = StringIO("""\
A B
1 bull
1 bull
1 pug
1 bull
2 pug
2 pug
3 dane
3 dane
4 shepherd
""")
df = (
pandas.read_csv(data, sep='\s+')
.groupby(by=['A'])
.filter(lambda g: g['B'].nunique() == 1)
)
print(df)
我得到:
A B
4 2 pug
5 2 pug
6 3 dane
7 3 dane
8 4 shepherd