具有多个ID的熊猫数据框的滚动平均值

时间:2018-11-09 22:39:55

标签: python pandas dataframe

我有一个pandas数据框,我在该数据框上计算多个id上的滚动平均值。

df:
╔════╦═══════╗
║ id ║ value ║
╠════╬═══════╣
║  1 ║     2 ║
║  1 ║     5 ║
║  1 ║     1 ║
║  2 ║     4 ║
║  2 ║     1 ║
║  2 ║     5 ║
║  2 ║     3 ║
║  3 ║     6 ║
║  3 ║     5 ║
╚════╩═══════╝

Current Resulting df:
╔════╦═══════╦═════════╗
║ id ║ value ║ average ║
╠════╬═══════╬═════════╣
║  1 ║     2 ║         ║
║  1 ║     5 ║ 3.5     ║
║  1 ║     1 ║ 3       ║
║  2 ║     4 ║ 2.5     ║
║  2 ║     1 ║ 2.5     ║
║  2 ║     5 ║ 3       ║
║  2 ║     3 ║ 4       ║
║  3 ║     6 ║ 4.5     ║
║  3 ║     5 ║ 5.5     ║
╚════╩═══════╩═════════╝

Expected Resulting df:
╔════╦═══════╦═════════╗
║ id ║ value ║ average ║
╠════╬═══════╬═════════╣
║  1 ║     2 ║         ║
║  1 ║     5 ║ 3.5     ║
║  1 ║     1 ║ 3       ║
║  2 ║     4 ║         ║
║  2 ║     1 ║ 2.5     ║
║  2 ║     5 ║ 3       ║
║  2 ║     3 ║ 4       ║
║  3 ║     6 ║         ║
║  3 ║     5 ║ 5.5     ║
╚════╩═══════╩═════════╝

现在,我的代码未考虑ID的更改,因此仍将取最后2个值的平均值。无论如何,是否要考虑ID的更改。 我当前的代码是df['value'] = df['value'].df(window = 2, min_periods = 1).mean()

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

concatgroupby

pd.concat([d.rolling(2).mean() for _, d in df.groupby('id')])

    id  value
0  NaN    NaN
1  1.0    3.5
2  1.0    3.0
3  NaN    NaN
4  2.0    2.5
5  2.0    3.0
6  2.0    4.0
7  NaN    NaN
8  3.0    5.5