如何重新采样具有应用于每列的不同功能的数据帧?

bmu*_*bmu 30 python numpy time-series pandas

我有大熊猫温度和辐射的时间序列dataframe.时间分辨率是常规步骤1分钟.

import datetime
import pandas as pd
import numpy as np

date_times = pd.date_range(datetime.datetime(2012, 4, 5, 8, 0),
                           datetime.datetime(2012, 4, 5, 12, 0),
                           freq='1min')
tamb = np.random.sample(date_times.size) * 10.0
radiation = np.random.sample(date_times.size) * 10.0
frame = pd.DataFrame(data={'tamb': tamb, 'radiation': radiation},
                     index=date_times)
frame
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 241 entries, 2012-04-05 08:00:00 to 2012-04-05 12:00:00
Freq: T
Data columns:
radiation    241  non-null values
tamb         241  non-null values
dtypes: float64(2)
Run Code Online (Sandbox Code Playgroud)

我怎样才能将其下采样dataframe到一小时的分辨率,计算温度的每小时平均值辐射的每小时总和

bmu*_*bmu 53

使用pandas 0.18,重新采样API已更改(请参阅文档).所以对于pandas> = 0.18,答案是:

In [31]: frame.resample('1H').agg({'radiation': np.sum, 'tamb': np.mean})
Out[31]: 
                         tamb   radiation
2012-04-05 08:00:00  5.161235  279.507182
2012-04-05 09:00:00  4.968145  290.941073
2012-04-05 10:00:00  4.478531  317.678285
2012-04-05 11:00:00  4.706206  335.258633
2012-04-05 12:00:00  2.457873    8.655838
Run Code Online (Sandbox Code Playgroud)

旧答案:

我正在回答我的问题以反映时间序列相关的变化pandas >= 0.8(所有其他答案都已过时).

使用pandas> = 0.8,答案是:

In [30]: frame.resample('1H', how={'radiation': np.sum, 'tamb': np.mean})
Out[30]: 
                         tamb   radiation
2012-04-05 08:00:00  5.161235  279.507182
2012-04-05 09:00:00  4.968145  290.941073
2012-04-05 10:00:00  4.478531  317.678285
2012-04-05 11:00:00  4.706206  335.258633
2012-04-05 12:00:00  2.457873    8.655838
Run Code Online (Sandbox Code Playgroud)

  • 这可以扩展到每列的函数列表:`frame.resample('1H',how = {'radiation':[np.sum,np.min],'tamb':np.mean})`.生成的DataFrame在其列上具有MultiIndex,原始列名称为级别0,函数名称为级别1. (4认同)
  • 要添加到我之前的注释:您可以使用字典而不是每列的函数列表,其中键是新列名称,值是要使用的函数:`frame.resample('1H',how = {'radiation':{'sum_rad':np.sum,'min_rad':np.min},'tamb':np.mean})` (2认同)