pandas -按连续日期时间段分组 [英] Pandas - groupby continuous datetime periods

查看:26
本文介绍了 pandas -按连续日期时间段分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 pandas 数据帧,如下所示:

    KEY   START       END         VALUE
0   A     2017-01-01  2017-01-16  2.1
1   B     2017-01-01  2017-01-23  4.3
2   B     2017-01-23  2017-02-10  1.7
3   A     2017-01-28  2017-02-02  4.2
4   A     2017-02-02  2017-03-01  0.8  
我希望groupbyKEYsumVALUE上,但仅在连续的时间段上。例如,在上面的示例中,我希望获得:

   KEY  START       END         VALUE 
0  A    2017-01-01  2017-01-16  2.1
1  A    2017-01-28  2017-03-01  5.0
2  B    2017-01-01  2017-02-10  6.0
由于时间间隔,A有两个组。 我希望避免FOR循环,因为数据帧有数千万行。

推荐答案

按组比较shiftedSTART列创建帮助器Series并将其用于groupby

s = df.loc[df.groupby('KEY')['START'].shift(-1) == df['END'], 'END']
s = s.combine_first(df['START'])
print (s)
0   2017-01-01
1   2017-01-23
2   2017-01-23
3   2017-02-02
4   2017-02-02
Name: END, dtype: datetime64[ns]

df = df.groupby(['KEY', s], as_index=False).agg({'START':'first','END':'last','VALUE':'sum'})
print (df)
  KEY  VALUE      START        END
0   A    2.1 2017-01-01 2017-01-16
1   A    5.0 2017-01-28 2017-03-01
2   B    6.0 2017-01-01 2017-02-10

这篇关于 pandas -按连续日期时间段分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆