对groupby对象中的每个组应用重采样
我创建了一个方便的方法,可以对任意的数据框进行重采样:
def resample_data_to_hourly(df):
df = df.resample('1H',how='mean',fill_method='ffill',
closed='left',label='left')
return df
我想把这个函数应用到一个分组对象中的每个数据框上,像下面这样:
df.transform(resample_data_to_hourly)
df.aggregate(resample_data_to_hourly)
dfapply(resample_data_to_hourly)
我尝试了所有方法,但都没有成功。无论我怎么做,数据框都没有任何变化,即使我把上面的结果赋值给一个新的数据框(据我理解,这本不应该是必要的)。
我相信在处理带有时间序列数据的分组对象时,有一些简单而常见的方法是我没有掌握的,但我一直无法修正我的程序。
我该如何创建像上面那样的函数,并让它们正确地应用到分组对象上?如果我像处理字典那样逐个遍历每个组,并把结果添加到一个新的字典中,然后再转换回分组对象,我的代码就能正常工作,但这样做太麻烦了,我觉得我错过了很多Pandas能做的事情,因为我被迫使用这些笨拙的方法。
编辑:添加基础示例:
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 个回答
3
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够清晰,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个函数时,发现它的表现和预期不一样,这时候就需要仔细检查代码,看看是不是哪里出错了。
另外,了解一些基本的编程概念,比如变量、循环和条件判断,能够帮助我们更好地理解代码的运行方式。这样,当我们遇到问题时,就能更快找到解决办法。
总之,编程就像解谜一样,有时候需要耐心和细心,才能找到问题的根源。
data.groupby(level=0)
.apply(lambda d: d.reset_index(level=0, drop=True)
.resample("M", how=""))