如何解决汇总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
有帮助吗?
解决方法
如果需要按连续的布尔值分组,请先按shift
,any
和cumsum
创建连续的组,然后为没有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 举报,一经查实,本站将立刻删除。