我是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