删除标签冲突的行

时间:2019-01-11 01:33:17

标签: python pandas numpy dataframe

说我有一个看起来像这样的表:

A   B 
1   bull 
1   bull 
1   pug 
1   bull 
2   pug 
2   pug 
3   dane 
3   dane 
4   shepherd

我正在寻找一种衬纸,以删除带有冲突标签的行。在上述情况下,标记为1的行将被删除,而其他行则与重复项无关。我当前的尝试是几行,并且在某些情况下失败。

2 个答案:

答案 0 :(得分:2)

我将nuniquetransform一起使用

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

您还可以使用groupbynunique,将唯一计数为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