首页 > 解决方案 > 根据其他行从熊猫数据框中删除行

问题描述

我需要你的帮助。我有一个这样的数据框(500k 行):

帐户 类别 开始日期 结束日期
1234567 猫1 2021-01-01 2021-04-30
1234567 猫1 2021-05-01 2021-05-31
1234567 猫1 2021-06-01 2021-08-09
1234567 猫2 2021-01-01 2021-04-30
1234567 猫2 2021-05-01 2021-08-09
7654321 猫1 2021-03-01 2099-12-31
7654321 猫2 2021-01-01 2021-02-28
7654321 猫2 2021-03-01 2099-12-31

现在我需要删除帐户和类别相同的“最旧”行。结果应该是这样的:

帐户 类别 开始日期 结束日期
1234567 猫1 2021-06-01 2021-08-09
1234567 猫2 2021-05-01 2021-08-09
7654321 猫1 2021-03-01 2099-12-31
7654321 猫2 2021-03-01 2099-12-31

任何帮助表示赞赏。

标签: pythonpandas

解决方案


首先确保 datelike 列是 datetime dtype:

df['startdate']=pd.to_datetime(df['startdate'])
df['enddate']=pd.to_datetime(df['enddate'])

最后使用sort_values()drop_duplicates()

df=(df.sort_values(by=['startdate','enddate'],ascending=False)
      .drop_duplicates(subset=['account','category'],ignore_index=True))

输出df

    account     category    startdate   enddate
0   1234567     cat1    2021-06-01  2021-08-09
1   1234567     cat2    2021-05-01  2021-08-09
2   7654321     cat1    2021-03-01  2099-12-31
3   7654321     cat2    2021-03-01  2099-12-31

推荐阅读