有没有一种方法可以使用 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
我是 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