2014-06-11 105 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