python - 根据其他行从熊猫数据框中删除行
问题描述
我需要你的帮助。我有一个这样的数据框(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 |
任何帮助表示赞赏。
解决方案
首先确保 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
推荐阅读
- javascript - 如何在加载时检查 JavaScript 时间
- python - csv中的数据,双引号括起来的数据
- python - Python中spdiags的排名问题
- flutter - 如何缓存 Future 返回的值?
- r - 对数据集进行子集以保留最大的 2 个值
- php - 访问数组的名称值
- azure - 如何使用 azurerm_virtual_machine_scale_set_extension 中的设置
- google-sheets - Google 表格乘以百分比
- sql - 标量子查询使用 UNNEST 生成多个元素
- reactjs - 样式化组件:babel-plugin-styled-components 不起作用