将重新采样应用于groupby对象中的每个组

时间:2014-05-06 03:53:56

标签: python numpy pandas dataframe

我已经创建了一种方便的方法来对任意数据帧进行重采样:

def resample_data_to_hourly(df):
  df = df.resample('1H',how='mean',fill_method='ffill',
                           closed='left',label='left')
  return df

我想将此函数应用于groupby对象中的每个数据帧,如下所示:

df.transform(resample_data_to_hourly)
df.aggregate(resample_data_to_hourly)
dfapply(resample_data_to_hourly)

我已经尝试过所有这些并没有成功。 无论我做什么,对数据帧都没有影响,即使我将上面的结果值设置为一个新的数据帧(根据我的理解,我不应该这样做)。

我确信使用我在这里缺少的时间序列数据处理groupby对象时会有一些直截了当和惯用的东西,但我还没有能够纠正我的程序。

如何创建上述功能并将它们正确应用于groupby对象? 如果我像在字典中一样遍历每个组并将结果添加到一个新的字典中然后我可以将其转换回groupby对象,我可以让我的代码工作,但这非常hacky我感觉像我&m; m错过了许多熊猫可以做的事情,因为我被强迫进入这些hacky方法。

编辑添加基础示例:

rng = pd.date_range('1/1/2000', periods=10, freq='10m')
df = pd.DataFrame({'a':pd.Series(randn(len(rng)), index=rng), 'b':pd.Series(randn(len(rng)), index=rng)})

的产率:

                       a         b
    2000-01-31  0.168622  0.539533
    2000-11-30 -0.283783  0.687311
    2001-09-30 -0.266917 -1.511838
    2002-07-31 -0.759782 -0.447325
    2003-05-31 -0.110677  0.061783
    2004-03-31  0.217771  1.785207
    2005-01-31  0.450280  1.759651
    2005-11-30  0.070834  0.184432
    2006-09-30  0.254020 -0.895782
    2007-07-31 -0.211647 -0.072757

df.groupby('a').transform(hour_resample) // should yield resampled data with both a and b columns
// instead yields only column b
// df.apply yields both columns but in this case no changes will be made to the actual matrix
// (though in this case no change would be made, sample data could be generated such that a change should be made)
// if someone could supply a reliable way to generate data that can be resampled, that would be wonderful

1 个答案:

答案 0 :(得分:2)

data.groupby(level=0)
    .apply(lambda d: d.reset_index(level=0, drop=True)
                      .resample("M", how=""))