对于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
添加回答
举报
0/150
提交
取消