2014-12-13 78 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