有一个像这样的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)