根据其他列的窗口间隔Pandas和列



有一个像这样的df:

weight   timeblock  
1        1620975600   
1        1620975640  
1        1620975700 
1        1620975715 
1        1620975740 
1        1620975790  
1        1620975800

,我想根据时间块间隔的45秒间隔对权重列求和,使其看起来像:

weight     interval
2          1620975600
2          1620975690
1          1620975735
2          1620975780

其中interval列表示从该时刻开始的45秒时间间隔。

我该如何做到这一点,并跳过时间块不存在的45秒间隔?

您可以使用pd.cut以45秒为增量创建箱子,然后按箱子分组并获得大小并删除零计数。

import pandas as pd
df = pd.DataFrame({'weight': [1, 1, 1, 1, 1, 1, 1],
'timeblock': [1620975600,
1620975640,
1620975700,
1620975715,
1620975740,
1620975790,
1620975800]})

df['interval'] = pd.cut(df.timeblock,
bins=[x for x in range(df.timeblock.min(), df.timeblock.max()+45, 45)],
labels=[x for x in range(df.timeblock.min(), df.timeblock.max(), 45)],
include_lowest=True)
df = df.groupby('interval').size().reset_index(name='weight')
df.loc[df['weight']>0]

输出
interval  weight
0  1620975600       2
2  1620975690       2
3  1620975735       1
4  1620975780       2

不知道为什么他们删除了他们的评论,但这似乎有效:

df = df.groupby(df.timeblock // 45).weight.sum().reset_index()
df['timeblock'] = df['timeblock'].apply(lambda x: x*45)

最新更新