Pandas:另一个列元素的条件滚动窗口?

dua*_*ris 0 python mean python-3.x pandas rolling-computation

我有一个包含日期、ID 和值的数据框。

例如:

date        id        value
2016-08-28   A          1
2016-08-28   B          1
2016-08-29   C          2
2016-09-02   B          0
2016-09-03   A          3
2016-09-06   C          1
2017-01-15   B          2
2017-01-18   C          3
2017-01-18   A          2
Run Code Online (Sandbox Code Playgroud)

我想按元素应用滚动平均值,然后声明一个,以便结果如下:

date        id        value    rolling_mean
2016-08-28   A          1           NaN
2016-08-28   B          1           NaN
2016-08-29   C          2           NaN
2016-09-02   B          0           0.5
2016-09-03   A          3           2.0
2016-09-06   C          1           1.5
2017-01-15   B          2           1.0
2017-01-18   C          3           2.0
2017-01-18   A          2           2.5
Run Code Online (Sandbox Code Playgroud)

我最接近的是:

grouped = df.groupby(["id", "value"])
df["rolling_mean"] = grouped["value"].shift(1).rolling(window = 2).mean()
Run Code Online (Sandbox Code Playgroud)

但这给了我错误的值,因为它与其余元素保持顺序。

任何想法?

先感谢您,

Qua*_*ang 5

你可以只分组id并使用transform

df['rolling_mean'] = df.groupby('id')['value'].transform(lambda x: x.rolling(2).mean())
Run Code Online (Sandbox Code Playgroud)

输出:

         date id  value  rolling_mean
0  2016-08-28  A      1           NaN
1  2016-08-28  B      1           NaN
2  2016-08-29  C      2           NaN
3  2016-09-02  B      0           0.5
4  2016-09-03  A      3           2.0
5  2016-09-06  C      1           1.5
6  2017-01-15  B      2           1.0
7  2017-01-18  C      3           2.0
8  2017-01-18  A      2           2.5
Run Code Online (Sandbox Code Playgroud)