2014-12-13 75 views
2

我從一個CSV採取了一些數據,並把它變成一個數據幀:計算滾滾整數天均線在熊貓

from pandas import read_csv 
df = read_csv('C:\...', delimiter = ',', encoding = 'utf-8') 
df2 = df.groupby(['i-j','day'])['i-j'].agg({'count'}) 

dataframe

我想計算每個「IJ」七他們的一天移動平均數。首先,我認爲我需要在表格中添加零計數的日子。有沒有一種簡單的方法通過修改上面的代碼來完成此操作?換句話說,我想缺失值計爲0

那我就需要另一列添加到計算數平均爲每個I-J爲前七天的數據幀。我需要幾天轉換的東西,大熊貓識別爲一個日期值才能使用一些滾動統計功能?或者我可以只更改'日期'列的類型並繼續。

非常感謝!

+0

向我們展示了什麼你到目前爲止已經嘗試過。 http://pandas.pydata.org/pandas-docs/stable/missing_data.html – wwii 2014-12-13 18:04:35

回答

1

可能有更好的方法來做到這一點,但是考慮df2你的起始數據框下面應該工作。

首先重新索引df2填補缺失的天零:

new_index = pd.MultiIndex.from_product([df2.index.get_level_values(0).unique(), range(31)]) 
df2 = df2.reindex(new_index, fill_value=0) 

(我假設你要31天,但您可以根據需要進行更改。)

現在,如果你unstack這個重建索引數據框中,走轉,你有一個數據幀,其中每列是i-j一個條目,包含每天計數:

df2.unstack().T 

可以計算滾動平均值此數據框的:

rm = pd.rolling_mean(df2.unstack().T, 7) 

要完成,你可以stack滾動的這種框架意味着要回到原來的形狀重建索引df2

rm.T.stack(dropna=False) 
+0

太棒了!謝謝 – 2014-12-14 16:06:54

+0

似乎重新索引(NEW_INDEX,fill_value = 0),在數列中的一切DF2下面的代碼設置爲0 即是一樣的上方,而DF3對每天的條目,但數= 0隨處可見。 new_index = pd.MultiIndex.from_product([df2。df2。 index.get_level_values(0).unique(),range(30)]) df3 = df2.reindex(new_index,fill_value = 0)' – 2014-12-14 16:45:28

+0

嗯 - 這不應該發生,除非現有的DataFrame中沒有任何索引是在'new_index'中。也許'天'列包含字符串不是整數? – 2014-12-14 18:10:34