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

按时间间隔分箱列并计算总和

按时间间隔分箱列并计算总和

人到中年有点甜 2021-10-12 17:30:19
我有熊猫数据帧:df = pd.DataFrame({    "computer": [0, 1, 2, 3, 0, 1, 2, 3],    "time":     [0, 0, 1, 1, 2, 3, 4, 5],    "value":    [4, 1, 5, 6, 1, 0, 3, 4],})df["time"] = pd.to_datetime(df["time"], unit="s")df.set_index(["computer", "time"])我想将time列分成 4s 间隔并对values求和。输出将如下所示:df = pd.DataFrame({    "computer":   [0, 1, 2, 3, 2, 3],    "start_time": [0, 0, 0, 0, 4, 4],    "value":      [5, 1, 5, 6, 3, 4],})df["start_time"] = pd.to_datetime(df["start_time"], unit="s")df.set_index(["computer", "start_time"])我试图通过时间窗口应用Pandas 组提供的代码,但由于多索引,我无法让它工作。我也试过这个resample方法,但同样的问题也适用。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

使用groupby有pd.Grouper:


u = (df.groupby(['computer', pd.Grouper(key='time', freq='4s')])

       .sum()

       .sort_index(level=1)

       .reset_index())

u['time'] = u['time'].dt.second


u

   computer  time  value

0         0     0      5

1         1     0      1

2         2     0      5

3         3     0      6

4         2     4      3

5         3     4      4

您可以允许一个调用同时处理“计算机”上的分组和重采样“时间”,而不是单独的groupbyand 。resamplegroupby


查看完整回答
反对 回复 2021-10-12
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

使用, reset_index, thengroupby和resample:


df.reset_index(level=0).groupby('computer').resample('4s')['value']\

   .sum().to_frame().sort_index(level=1)

或者


df.reset_index('computer').groupby('computer').resample('4s')['value']\

   .sum().to_frame().sort_index(level=1)

输出:


                              value

computer time                      

0        1970-01-01 00:00:00      5

1        1970-01-01 00:00:00      1

2        1970-01-01 00:00:00      5

3        1970-01-01 00:00:00      6

2        1970-01-01 00:00:04      3

3        1970-01-01 00:00:04      4


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号