如何将“时间戳记”列分组以每小时进行一次,并汇总熊猫数据框中的行

时间:2019-08-13 17:59:52

标签: python pandas

我有一个数据框,其中包含每分钟的数据,它还包含一个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进行分组而不索引呢?

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试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]

希望有帮助!