为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中删除数据框中的匹配对

在Python中删除数据框中的匹配对

烙印99 2023-08-08 10:48:16
对于df:    id          Date        ITEM_ID TYPE    GROUP0   13710750    2019-07-01  SLM607  O       X1   13710760    2019-07-01  SLM607  O       M2   13710770    2019-07-03  SLM607  O       I3   13710780    2019-09-03  SLM607  O       N4   13667449    2019-08-02  887643  O       I5   13667450    2019-08-02  792184  O       I6   13728171    2019-09-17  SLM607  I       I7   13667452    2019-08-02  794580  O       I可重现的例子:data = {'id': [13710750, 13710760, 13710770, 13710780, 13667449, 13667450, 13728171, 13667452],        'Date': ['2019-07-01', '2019-07-01', '2019-07-03', '2019-09-03', '2019-08-02', '2019-08-02', '2019-09-17', '2019-08-02'],        'ITEM_ID': ['SLM607', 'SLM607', 'SLM607', 'SLM607', '887643', '792184', 'SLM607', '794580'],        'TYPE': ['O', 'O', 'O', 'O', 'O', 'O', 'I', 'O'],        'GROUP': ['X', 'M', 'I','N','I','I','I', 'I']}df = pd.DataFrame(data)df如何删除具有相同值的行对ITEM_ID和GROUP,但一个具有Ofor 的TYPE行先出现,另一行具有Ifor 的TYPE值稍后出现?预期结果:    id          Date        ITEM_ID TYPE    GROUP0   13710750    2019-07-01  SLM607  O       X1   13710760    2019-07-01  SLM607  O       M3   13710780    2019-09-03  SLM607  O       N4   13667449    2019-08-02  887643  O       I5   13667450    2019-08-02  792184  O       I7   13667452    2019-08-02  794580  O       I
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

shift和filter


out = df.groupby(['ITEM_ID','GROUP']).filter(lambda x : ~(x['TYPE'].eq('I') & x['TYPE'].shift().eq('O')).any())

Out[7]: 

         id        Date ITEM_ID TYPE GROUP

0  13710750  2019-07-01  SLM607    O     X

1  13710760  2019-07-01  SLM607    O     M

3  13710780  2019-09-03  SLM607    O     N

4  13667449  2019-08-02  887643    O     I

5  13667450  2019-08-02  792184    O     I

7  13667452  2019-08-02  794580    O     I


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信