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



我是panda的新手,尝试过使用panda对数据集进行排序/过滤和分组。我试图在论坛上搜索我目前面临的问题的解决方案,但找不到合适的解决方案。

问题是这样的:

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

输入数据集

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

所需输出如下:

期望输出

我需要将数据分组如下:对于每个唯一的ID,Col1和Col2组合,我需要最早的日期(从Date1开始(和最晚的日期(自Date2开始(

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

想知道熊猫是否有解决这些问题的简单方法。很抱歉没有提供我尝试过的任何代码,因为我不太精通熊猫,目前正在尝试使用excel的硬件。

谢谢大家

Pandasgroupby可以帮助您获得所需的结果。在一行中,你可以做这样的事情:

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

最新更新