我从csv中获取了一些数据并将其放入数据帧中:
from pandas import read_csv
df = read_csv('C:\...', delimiter = ',', encoding = 'utf-8')
df2 = df.groupby(['i-j','day'])['i-j'].agg({'count'})
我想计算每个'i-j'计算的七天移动平均值。首先,我认为我需要在表格中添加零计数的日期。有没有一种简单的方法可以通过修改上面的代码来做到这一点?换句话说,我希望缺少值计为0。
然后我需要在数据框中添加另一列,计算前七天每个i-j的平均值。我是否需要将天数转换为熊猫识别为日期值的东西才能使用某些滚动统计函数?或者我可以只更改“日期”列的类型并继续。
非常感谢!
答案 0 :(得分:1)
可能有更好的方法可以做到这一点,但是如果您的起始DataFrame为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
重新编制了DataFrame并进行转置,那么您就拥有了一个DataFrame,其中每列都是i-j
的条目,并且包含每天的计数:
df2.unstack().T
您可以计算此DataFrame的滚动平均值:
rm = pd.rolling_mean(df2.unstack().T, 7)
要完成,您可以stack
此滚动框架意味着恢复原始重新编制索引df2
的形状:
rm.T.stack(dropna=False)