首页 > 解决方案 > 如何计算熊猫数据框中每个行子集的移动平均值?

问题描述

dataframe看起来像这样:

Region  ...  Value
  'A'   ...    1
  'A'   ...    2
  'A'   ...    3
  'A'   ...    4
  'B'   ...    1
  'B'   ...    5
  'B'   ...    4

我需要做的是添加一个新列“MA”,其中包含仅考虑相对于同一“区域”的行计算的移动平均值:

Region  ...  Value  MA
  'A'   ...    1    NaN
  'A'   ...    2    1.5
  'A'   ...    3    2.5
  'A'   ...    4    3.5
  'B'   ...    1    NaN
  'B'   ...    5     3
  'B'   ...    4    4.5

我尝试了这样的循环,因为我有一个names包含所有可能区域名称的列表:

for i in name:
    dataframe['MA'] = dataframe.loc[dataframe['Region'] == str(i), 'Value'].rolling(window=2).mean()

但我得到一列只有 NaN。

标签: pythonpandasdataframe

解决方案


试试rolling+groupby

df['new'] = df.groupby('Region').rolling(2).mean().reset_index(level=0,drop=True)
df
  Region  ...  Value  new
0    'A'  ...      1  NaN
1    'A'  ...      2  1.5
2    'A'  ...      3  2.5
3    'A'  ...      4  3.5
4    'B'  ...      1  NaN
5    'B'  ...      5  3.0
6    'B'  ...      4  4.5

推荐阅读