有没有一种方法可以使用 pandas 根据其他条件对来自两个不同列和跨行的日期进行分组?

Is there a way to group date from two different columns and across rows based on other conditions using pandas?

我是 pandas 的新手,尝试了一些 sorting/filtering 和使用 pandas 对数据集进行分组。我试图搜索论坛以找到解决我目前面临的问题的方法,但找不到合适的方法。

问题是这样的:

我有一个包含两个日期列的数据集,根据其他列的某些条件,我需要将这些日期组合在一起例如:这是我的输入数据集

Input Data Set

根据列 Con1 和 Con2 中的值,我需要选择第一个开始日期 (Date1) 和最后一个结束日期 (Date2) 并生成输出

期望的输出如下:

Desired Output

我需要按如下方式对数据进行分组:对于每个唯一 ID、Col1 和 Col2 组合,我需要最早的日期(从 Date1 开始)和最晚的日期(从 Date2 开始)

在提供的 ID 13440, C 示例中,1 是第一个组合,我需要从第一条记录 ( 10-01-2020 ) 中获取日期 1,从最后一条记录 ( 31-05-2020 ) 中获取日期 2 .

想知道 pandas 是否有解决此类问题的简单方法。很抱歉没有提供我尝试过的任何代码,因为我不精通 pandas 并且目前正在尝试使用 excel.

谢谢大家

Pandas groupby 可以帮助您获得想要的结果。在一行中,你可以做这样的事情:

data_df.groupby(['ID','Con1','Con2']).agg(Date1=('Date1','first'),
                                     Date2 = ('Date2', 'last')).reset_index().sort_values(by=['Con2','Date1'])

你的结果将是:

    ID    Con1 Con2   Date1     Date2
1   13440   C   1   2020-01-10  2020-05-31
2   13440   C   2   2020-06-01  2020-08-25
0   13440   B   2   2020-08-26  2020-09-15
3   13440   S   2   2020-09-16  2020-10-31

检索并合并每个日期列中的第一行和最后一行。

df1 = (pd.concat([df.groupby(['ID','Con1','Con2'])['Date1'].agg('first'),
                 df.groupby(['ID','Con1','Con2'])['Date2'].agg('last')], axis=1))
df1 = df1.reset_index()
df1.sort_values('Date1', ascending=True)
    ID  Con1    Con2    Date1   Date2
1   13440   C   1   2020-01-10  2020-05-31
2   13440   C   2   2020-06-01  2020-08-25
0   13440   B   2   2020-08-26  2020-09-15
3   13440   S   2   2020-09-16  2020-10-31