仅在包含特定值时保留行

时间:2020-06-19 05:18:25

标签: python pandas

我有数据:

   item  colour machine
0   car     red       a
1   car     red       b
2   car   green       b
3   car    blue       a
4  moto  yellow       a
5  moto     red       a
6  bike    blue       a
7  bike    blue       b
8  bike   green       a

我正在尝试仅将具有记录的项保留在机器a和b上。我尝试了一些在Internet上找到的功能,但是这些功能不起作用,因此我必须手动使用data.drop()进行操作。是否存在执行该功能的功能?结果dataframe应该是:

   item colour machine
0   car    red       a
1   car    red       b
2  bike   blue       a
3  bike   blue       b

谢谢!

1 个答案:

答案 0 :(得分:1)

GroupBy.transform与自定义lambda函数一起使用,以比较转换为tuplelist的值,然后在boolean indexing中进行过滤:

如果有必要,也可以不确定订单是否总是a,b进行首次排序:

df = df.sort_values(['item','colour','machine'])

f = lambda x: tuple(x) == tuple(['a','b'])
#alternative
f = lambda x: list(x) == list(['a','b'])
#solution if want compare and remove duplicates
#f = lambda x: set(x) == set(['a','b'])
df = df[df.groupby(['item','colour'])['machine'].transform(f)]

print (df)
   item colour machine
0   car    red       a
1   car    red       b
6  bike   blue       a
7  bike   blue       b