将 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()
我有一个数据框 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()