将 table 的所有列转换为 pandas 数据框中行的移动平均线

Converting all columns of the table into the moving averages along rows in pandas dataframe

我有一个数据框 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 个纳米,然后是 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

我如何修改上面的内容,以便它为我提供行方向的滚动平均值?

您的 Date 列似乎已经是行索引。因此,您可以简单地使用:

df.rolling(7).mean()

如果您的 Date 列还不是行索引,您可以尝试:

df.set_index('Date').rolling(7).mean()