pandas groupby中非空值的偏移和滚动平均值

2024-10-02 14:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来生成一个移动窗口,它基于过去n天内每个组的非空值的平均值。在

例如,如果移动窗口大小为3,我希望根据每个组的ct列中的非空值生成列MovAvg(即具有滞后效应)。在

Date    Group   ct      MovAvg
1/1/71  A   NaN NaN
2/1/71  A   1   NaN
3/1/71  A   NaN NaN
4/1/71  A   NaN 1
5/1/71  A   1   1
6/1/71  A   NaN 1
7/1/71  A   0   1
8/1/71  A   NaN 0.5
9/1/71  A   NaN 0
10/1/71 A   1   0
11/1/71 A   0   1
1/1/71  B   NaN NaN
2/1/71  B   1   NaN
3/1/71  B   NaN NaN
4/1/71  B   NaN 1
5/1/71  B   0   1
6/1/71  B   1   0
7/1/71  B   1   0.5
8/1/71  B   NaN 0.67
9/1/71  B   NaN 1
10/1/71 B   1   1
11/1/71 B   0   1

Tags: 方法dategroupnan平均值空值ctmovavg
2条回答
  df['MovAvg'] = df['ct'].groupby(df['Group']).rolling(3, min_periods=1).mean().shift()

我们可以将^{}与至少需要一次有效观察的min_periods=1一起使用,因此我们可以使用您的NaN来解决问题:

df['MovAvg'] = pd.concat([d['ct'].rolling(3, min_periods=1).mean().shift() for _, d in df.groupby('Group')])

^{pr2}$

相关问题 更多 >