如何解决有没有一种方法可以使用熊猫根据其他条件从两个不同的列和跨行对日期进行分组?
我是熊猫的新手,并尝试使用熊猫对数据集进行排序/过滤和分组。我试图在论坛上搜索,以找到当前遇到的问题的解决方案,但找不到合适的问题。
问题是这样的:
我有一个包含两个日期列的数据集,根据其他列上的某些条件,我需要将这些日期分组在一起。例如:这是我拥有的输入数据集
基于列Con1和Con2中的值,我需要选择第一个开始日期(Date1)和最后一个结束日期(Date2)并生成输出
所需的输出如下:
我需要按以下方式对数据进行分组:对于每个唯一ID,Col1和Col2组合,我需要最早的日期(从Date1开始)和最新的日期(从Date2开始)
在提供的示例ID 13440中,C,1是我需要从第一条记录(10-01-2020)和date2从最后一条记录(31-05-2020)获取的第一个组合。 / p>
想知道熊猫是否有解决此类问题的简便方法。很抱歉没有提供我尝试过的任何代码,因为我不精通熊猫,目前正在尝试使用excel。
谢谢大家
解决方法
熊猫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','Con2'])['Date1'].agg('first'),df.groupby(['ID','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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。