python - 根据日期范围合并行

标签 python pandas

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

<头>
ID 开始日期 endDate
123 2020-01-01 2020-01-25
123 2020-01-26 2020-02-08
123 2020-02-09 2020-03-12

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

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

<头>
ID 开始日期 endDate
123 2020-01-01 2020-03-12

你知道如何用 pandas 做到这一点吗?

最佳答案

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

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')

关于python - 根据日期范围合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69115428/

相关文章:

python - 有没有办法在 Bokeh 中使用 MultiSelect 来选择绘制哪个流数据通道?

python - 从元组列表中删除重复项

python - 在Python中生成所有可能的组合

python - 有没有办法将时间序列数据重新采样为 x 小时并以 One-Hot 编码格式获得输出?

python - Python Pandas 中的 GroupBy 函数,如 SUM(col_1*col_2)、加权平均值等

python - 如何将嵌套列表中的 collections.defaultdict(list) 的结果输出到 jinja 中?

python - 如何忽略传递给函数的意外关键字参数?

python - 如何在 Pandas 中选择不同大小的代码?

python - Pandas Dataframe 按列排序

python - 在 MAC 10.7 或 10.8 上强制使用 32 位 Python