首页 > 解决方案 > 根据日期范围合并行

问题描述

我有一个带有数百列和数千行的 pandas df。以下是我们感兴趣的 3 列:

ID 开始日期 结束日期
123 2020-01-01 2020-01-25
123 2020-01-26 2020-02-08
123 2020-02-09 2020-03-12

我希望每一行具有相同的 ID,如果日期彼此跟随,则合并行,并保持所有其他列不变。

对于我们的示例,输出将是单行,因为日期如下:

ID 开始日期 结束日期
123 2020-01-01 2020-03-12

你知道如何用熊猫来做这件事吗?

标签: pythonpandas

解决方案


如果日期时间未排序或不确定使用minandmax进行聚合:

df.groupby('ID', as_index=False).agg({'startDate': 'min', 'endDate': 'max'})

如果有很多其他列并且只需要聚合 2 列:

df['startDate'] = df.groupby('ID')['startDate'].transform('min')
df['endDate'] = df.groupby('ID')['endDate'].transform('max')

df = df.drop_duplicates('ID')

推荐阅读