首页 > 解决方案 > 如何在 groupby 和 rollingsum 之后创建具有值的新列?

问题描述

我正在尝试在现有的df. 新列的值由 groupby 和 rolling sum 的组合创建。我该怎么做呢?

我尝试了两种方法,都导致 NaN 值或“插入列的索引与帧索引不兼容”

df = 类似这样的东西:


    HomeTeam    FTHP
0   Bristol Rvs 0
1   Crewe           0
2   Hartlepool  3
3   Huddersfield    1

我试过了:

(1)

df['new'] = df.groupby('HomeTeam')['FTHP'].rolling(4).sum()

(2)

df['new'] = df.groupby('HomeTeam').FTHP.apply(lambda x: x.rolling(4).mean())

(1) 输出以下是我想在新列中添加的值。

HomeTeam        
Brighton     12      NaN
             36      NaN
             49      NaN
             72      2.0
             99      2.0

我正在尝试将这些值添加到适当的 HomeTeam 旁边的新列中。导致前三个的 NaN(因为它正在滚动(4))并在之后拾取值,例如:


    HomeTeam    FTHP      RollingMean
0   Bristol Rvs 0         NaN
1   Crewe           0         NaN
2   Hartlepool  3         NaN
3   Huddersfield    1         NaN

标签: pythonpandasgroup-bymultiple-columnsrolling-sum

解决方案


要确保与原始(非重复)索引对齐:

df.groupby('HomeTeam', as_index=False)['FTHP'].rolling(4).sum().reset_index(0, drop=True)

有一个df

  HomeTeam  FTHP
A        a     0
B        b     1
C        b     2
D        a     3
E        b     4

分组as_index=False添加一个ngroup值作为第 0 级,在第 1 级保留原始索引:

df.groupby('HomeTeam', as_index=False)['FTHP'].rolling(2).sum()
#0  A    NaN
#   D    3.0
#1  B    NaN
#   C    3.0
#   E    6.0
#Name: FTHP, dtype: float64

删除级别=0 以确保与原始索引对齐。您的原始索引不应重复,否则您会得到一个ValueError.


推荐阅读