微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

汇总pandas Dataframe时间序列组中的相同连接行

如何解决汇总pandas Dataframe时间序列组中的相同连接行

假设一个时间序列f.e。:

Time  Hours col1  col2  col3
10:00     2 True  True  False
12:00     1 True  True  False
13:00     2 False False False
15:00     1 False False False
16:00     1 True  True  False
17:00     1 True  True  False

我想对具有相同布尔值的行进行分组,但前提是它们已连接。 结果应如下:

Time  Hours col1  col2  col3
10:00     3 True  True  False
13:00     3 False False False
16:00     2 True  True  False

有帮助吗?

解决方法

如果需要按连续的布尔值分组,请先按shiftanycumsum创建连续的组,然后为没有first的所有列汇总Hours,它由sum聚合:

df1 = df.select_dtypes(bool)

g = df1.ne(df1.shift()).any(axis=1).cumsum()
d = dict.fromkeys(df.columns,'first')
d['Hours'] = 'sum'

df = df.groupby(g).agg(d)
print (df)
    Time  Hours   col1   col2   col3
1  10:00      3   True   True  False
2  13:00      3  False  False  False
3  16:00      2   True   True  False
,

您可以这样做:

cond = (df[['col1','col2','col3']] == df[['col1','col3']].shift()).all(axis=1)
df.groupby(cond[::-1].cumsum()).agg(dict(Time='first',Hours='sum',col1='first',col2="first",col3='first'))
```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。