【问题标题】:Converting all columns of the table into the moving averages along rows in pandas dataframe将表的所有列转换为熊猫数据框中行的移动平均值
【发布时间】: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


【解决方案1】:

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

df.rolling(7).mean()

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

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

【讨论】:

  • @bluetail 是的,它很容易被忽视。请记住,Pandas 函数通常有两个版本:一个用于 Dataframe,一个用于 Series。因此,请充分利用 Pandas API 指南查找相关函数。
猜你喜欢
  • 2019-10-12
  • 2019-10-10
  • 2020-04-26
  • 2018-05-15
  • 2017-06-22
  • 2021-09-29
  • 2019-12-16
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多