在 pandas Dataframe(时间序列组)中聚合相同的连接行

假设一个时间序列 fe:


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

有什么帮助吗?


慕莱坞森
浏览 128回答 2
2回答

繁华开满天机

如果需要按连续的布尔值分组,首先按, 然后创建连续的组shift,然后对没有 的所有列进行聚合,它按以下方式聚合:anycumsumfirstHourssumdf1 = 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   col31  10:00      3   True   True  False2  13:00      3  False  False  False3  16:00      2   True   True  False

至尊宝的传说

你可以这样做:cond = (df[['col1', 'col2', 'col3']] == df[['col1', 'col2', 'col3']].shift()).all(axis=1)df.groupby(cond[::-1].cumsum()).agg(dict(Time='first',  Hours='sum',                                         col1='first', col2="first", col3='first'))```
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python