为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2023-05-23 10:51:47
假设一个时间序列 fe:Time  Hours col1  col2  col310:00     2 True  True  False12:00     1 True  True  False13:00     2 False False False15:00     1 False False False16:00     1 True  True  False17:00     1 True  True  False我想对具有相同布尔值的行进行分组,但前提是它们已连接。结果应如下所示:Time  Hours col1  col2  col310:00     3 True  True  False13:00     3 False False False16:00     2 True  True  False有什么帮助吗?
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果需要按连续的布尔值分组,首先按, 然后创建连续的组shift,然后对没有 的所有列进行聚合,它按以下方式聚合:anycumsumfirstHourssum


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


查看完整回答
反对 回复 2023-05-23
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

你可以这样做:


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'))

```


查看完整回答
反对 回复 2023-05-23
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信