我有一个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()
任何帮助将不胜感激
答案 0 :(得分:0)
concat
和groupby
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