你好,我有一个想要清理的 Pandas 数据框。这是一个例子:
IDBILL | IDBUYER | 比尔 | 日期 |
---|---|---|---|
001 | 768787 | 45 | 1897-07-24 |
001 | 768787 | 67 | 1897-07-24 |
001 | 768787 | 98 | 1897-07-24 |
002 | 768787 | 30 | 1897-07-24 |
002 | 768787 | 15 | 1897-07-24 |
002 | 768787 | 12 | 1897-07-24 |
005 | 786545 | 45 | 1897-08-19 |
008 | 657676 | 89 | 1989-09-23 |
009 | 657676 | 42 | 1989-09-23 |
010 | 657676 | 18 | 1989-09-23 |
012 | 657676 | 51 | 1990-03-10 |
016 | 892354 | 73 | 1990-03-10 |
018 | 892354 | 48 | 1765-02-14 |
020 | 892354 | 62 | 1765-02-14 |
我想删除最高的帐单(并保留最低的帐单,当同一天的帐单由同一 IDBUYER 开具且帐单 ID 相互跟随时。 要得到这个:
IDBILL | IDBUYER | 比尔 | 日期 |
---|---|---|---|
002 | 768787 | 30 | 1897-07-24 |
002 | 768787 | 15 | 1897-07-24 |
002 | 768787 | 12 | 1897-07-24 |
005 | 786545 | 45 | 1897-08-19 |
010 | 657676 | 18 | 1989-09-23 |
012 | 657676 | 51 | 1990-03-10 |
016 | 892354 | 73 | 1990-03-10 |
018 | 892354 | 48 | 1765-02-14 |
020 | 892354 | 62 | 1765-02-14 |
提前致谢
答案 0 :(得分:1)
一种解决方案:
df = df.sort_values('BILL')
df.loc[df.assign(cc = df.groupby(['DATE','IDBUYER',df.groupby(['DATE','IDBUYER'])['IDBILL'].transform(lambda x: x.diff().gt(1).cumsum())]).cumcount(),cc2 = df.groupby(['DATE','IDBUYER','IDBILL']).transform('count'),floor = lambda x: ~(x['cc'].floordiv(x['cc2'],axis=0).astype(bool)))['floor']].sort_index()