如何在Python的Pandas中按指定时间段对日期时间进行分组并应用聚合函数?

3
我有一个包含两列的数据框。 第一列是每分钟的时间戳。 第二列是一个数字。 我想要做的是将第一列更改为每30分钟的时间戳,并计算该时间段内第二列中的30个数字的总和。

example dataframe

每一分钟都展示着力量,但我想将它们归纳到每30分钟。


请有人帮忙:( - 一个太空银
你可以将时间戳设置为索引,使用series.resample('30T').sum() - Ferris
请避免在SO上发布图像,而是发布一个样本数据帧代码,以便其他人可以更好/更快地帮助您。谢谢 - Ehsan
谢谢您的回复!我会确保以后避免那个问题。 - 一个太空银
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1

使用pandas / Series.resample

Series.resample可以帮助您设置时间戳作为索引; 然后使用series.resample('30T').sum()

手动版本

您可以在要保留的系列上使用cumsum

然后仅选择每30个位置的索引(np.arange(0,len(df),30))。

然后向后迭代数据帧并从第n-1行中找到的总和减去第n行以仅保留最后30分钟的值。 迭代效率不高,但由于数据集有100万行,如果您每30行取1行,则应该很快(33,333次迭代)。

df['cumsum'] = df["Power_kw"].cumsum()
df_30_min = df.iloc[np.arange(0, len(df), 30)].copy()

for i in range(len(df_30_min), 1, -1):
    df_30_min.iloc[i-1, df_30_min.columns.get_loc('B')] -= df_30_min.iloc[i-2, df_30_min.columns.get_loc('B')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,