【发布时间】:2021-09-07 08:37:05
【问题描述】:
我有一个数据框 df,索引为日期列,列为整数。
c = {'Date': ['2020-12-08','2020-12-09','2020-12-10','2020-12-11','2020-12-12','2020-12-13','2020-12-14'], 'Name1': [11,5,85,128,4,3,233], 'Name2':[18,1,39,63,2,3,330],'Name3':[15,32,80,89,54,70,89], 'Name4' :[1,2,5,75,4,1,25], 'Name5':[394,937,840,788,259,241,718], 'Name6':[66,96,118,43,31,27,50], 'Name7':[34,67,72,76,0,0,151]}
df = pd.DataFrame(data=c).set_index('Date')
df
Date Name1 Name2 Name3 .... Name7
...
2020-12-08 11 18 15
2020-12-09 5 1 32
2020-12-10 85 39 80
2020-12-11 128 ...
2020-12-12 4 ...
2020-12-13 3 ...
2020-12-14 233 ...
我想获得每列的移动平均线。
我已经在 1 列上进行了尝试,这很好 - 它给出了前 6 个 nan,然后是 7 天的平均值。
df_a = (df['Name1'].rolling(7)).mean()
df_a.tail(10)
2020-12-08 NaN
2020-12-09 NaN
2020-12-10 NaN
2020-12-11 NaN
2020-12-12 NaN
2020-12-13 NaN
2020-12-14 67.000000
2020-12-15 132.857143
....
现在,我正在尝试对所有列做同样的事情
cols= ['Name1','Name2','Name3','Name4','Name5','Name6','Name7']
df_a = df.apply(lambda x: (x[cols].rolling(7)).mean(), axis=1)
它给了我这样的东西 - 前 6 列的 nan。
Date Name1 Name2 Name3 Name4 Name Name6 Name7
2020-12-08 NaN NaN NaN NaN NaN NaN 77
2020-12-09 NaN NaN NaN NaN NaN NaN 163
2020-12-10 NaN NaN NaN NaN NaN NaN 177
2020-12-11 NaN NaN NaN NaN NaN NaN 180
2020-12-12 NaN NaN NaN NaN NaN NaN 51
如何修改上述内容,以便按行显示滚动平均值?
【问题讨论】:
-
您想要所有 Dataframe 列的滚动均值,还是仅选择部分列?
-
我更新了问题,以便您可以重现。对于所有数据框列,是的。
-
那么只需使用
df.rolling(7).mean()就足够了。
标签: python pandas dataframe lambda rolling-computation