按天按小时粒度分组日期时间列



如何对以下数据框进行分组(日期列中具有每小时粒度(

import pandas as pd
import numpy as np
np.random.seed(42)
date_rng = pd.date_range(start='1/1/2018', end='1/03/2018', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
print(df.head())
date  data
0 2018-01-01 00:00:00    51
1 2018-01-01 01:00:00    92
2 2018-01-01 02:00:00    14
3 2018-01-01 03:00:00    71
4 2018-01-01 04:00:00    60

按天计算每天的最小值和最大值?

使用DataFrame.resample

print(df.resample('d', on='date')['data'].agg(['min','max']))
min  max
date                
2018-01-01    1   99
2018-01-02    2   91
2018-01-03   72   72

您还可以指定列名称:

df1 = df.resample('d', on='date')['data'].agg([('min_data', 'min'),('max_data','max')])
print (df1)
min_data  max_data
date                          
2018-01-01         1        99
2018-01-02         2        91
2018-01-03        72        72

Grouper的另一种解决方案:

df1 = (df.groupby(pd.Grouper(freq='d', key='date'))['data']
.agg([('min_data', 'min'),('max_data','max')]))

最新更新