2014-06-11 107 views
1

我在PandasDataFrame中有一个时间序列,其中一个列包含来自模型预测的日常残差。我希望找到每月平均值,并从每日每日模型预测中减去此月平均值。是否有一些.groupby.resample的组合可用于编码?使用.groupby和.resample在熊猫数据帧上执行操作

monthly_res = sve_DOC['sRes'].resample('M', how='mean') 
sve_DOC['RIMsDOC2'] = sve_DOC['RIMsDOC'] - monthly_res 

我可以得到每月的平均水平,但我不知道如何来确保正确的月平均是在每天的模型预测使用。

回答

1

你可以使用一个transform

g = sve_DOC['sRes'].groupby(pd.TimeGrouper('M')) 
g.transform('mean') 

sve_DOC['RIMsDOC2'] = sve_DOC['RIMsDOC'] - g.transform('mean') 

注:必须使用TimeGrouper到GROUPBY个月(就像你在重采样会)。

+0

我有一个后续问题。是否可以通过'绝对'月份将'.groupby','pd.TimeGrouper'或'.resample',意味着如果一个数据集跨越多年,它将减少到只有12行(每月一个)。或者是编写函数来检查月份字段的唯一方法? – Bprodz

+1

@Bprodz我想我只是做'.groupby(df.index.month)' –

+0

我不知道为什么,但它似乎并没有工作,无论我通过一系列或DF。 'print test.groupby(test.index.month).head()'不会影响数据,尽管没有错误发生并且'print test.index.month'返回一个月份数字列表。我错过了明显的东西吗? – Bprodz