【问题标题】:Pandas: Calculate the average over all of the columns for n rolling rows at a timePandas:一次计算 n 个滚动行的所有列的平均值
【发布时间】:2017-02-03 04:03:15
【问题描述】:

我想要做的是......我有时间序列,我想计算滚动平均值,用于跨多列的 n 行。 我最初所做的是创建另一列,其中包含每行的平均值,然后对 n 行进行标准滚动平均值。 但是,当我在某些列中没有值时,我的计算会受到影响。

例子:

Col1 | Col2 | Col3 | Avg
10   | 20   |      | 15
     | 10   |      | 10
10   | 15   |  20  | 15

平均滚动平均值:13.33

虽然应该是:14.16

这是对我有用的示例,它包含所有数字...

Col1 | Col2 | Col3 | Avg 
10   | 20   |   15 | 15
10   | 10   |   10 | 10
10   | 15   |   20 | 15

平均滚动平均值:13.33

虽然应该是:13.33

我可以做的是手动循环...我还可以添加第二列,其中包含每行中的元素数量。

但是有没有更好的方法呢?

【问题讨论】:

  • 我不明白 12.14 是从哪里来的?
  • 如果您将第一个示例中的所有可用值相加并相除,您将得到 12.14
  • 10+20+10+10+15+20 / 6 = 12.14
  • 这就是我的意思(10+20+10+10+15+20) / 6 != 12.14
  • 该死...你是对的,它是 14.16。我想我复制/粘贴了错误的值。

标签: python pandas


【解决方案1】:

np.nanmean 将平均多维数组中的所有内容。

np.nanmean(df.values)

14.166666666666666

以滚动 3 个周期的方式使用它,您可以这样做

pd.Series({df.index[i]: np.nanmean(df.iloc[i-2:i+1].values) for i in range(2, len(df))})

2    14.166667
dtype: float64

【讨论】:

  • 谢谢!实际上这就是我所做的,但感觉太“手动”了。我希望有更优雅的方式,而不必依赖 iloc 和循环。
猜你喜欢
  • 2021-11-08
  • 2018-05-08
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2019-01-22
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多