我有一个数据框,其中包含每分钟的数据,它还包含一个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
进行分组而不索引呢?
谢谢。
答案 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]
希望有帮助!