首页 > 解决方案 > 我如何将时间戳列分组为每小时并聚合熊猫数据框中的行

问题描述

我有一个包含每分钟数据的数据框,它还包含一个date用于以时间戳格式跟踪日期的列。

在这里,我试图按小时而不是分钟来聚合数据。

我尝试了以下有效的代码,但它需要根据我不想要的列进行索引,因为这样我就无法使用函数date遍历数据框。df.loc

import pandas as pd
from datetime import datetime
import numpy as np

date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='T')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))

df.set_index('date')
df.index = pd.to_datetime(df.index, unit='s')
df = df.resample('H').sum()
df.head(15)

我也试过 groupby 但它不起作用,下面是代码。

df.groupby([df.date.dt.hour]).data.sum()
print(df.head(15))

我如何在date不对其进行索引的情况下进行分组?

谢谢。

标签: pythonpandas

解决方案


尝试pd.Grouper指定freq参数:

df.groupby([pd.Grouper(key='date', freq='1H')]).sum()

完整代码:

import pandas as pd
from datetime import datetime
import numpy as np

date_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='T')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0, 100, size=(len(date_rng)))

print(df.groupby([pd.Grouper(key='date', freq='1H')]).sum())
#                      data
# date
# 2018-01-01 00:00:00  2958
# 2018-01-01 01:00:00  3084
# 2018-01-01 02:00:00  2991
# 2018-01-01 03:00:00  3021
# 2018-01-01 04:00:00  2894
# ...                   ...
# 2018-01-07 20:00:00  2863
# 2018-01-07 21:00:00  2850
# 2018-01-07 22:00:00  2823
# 2018-01-07 23:00:00  2805
# 2018-01-08 00:00:00    25

# [169 rows x 1 columns]

希望有帮助!


推荐阅读