如何用groupby和rollingsum之后的值创建一个新列?

时间:2019-04-26 14:49:50

标签: python pandas group-by multiple-columns rolling-sum

我正在尝试在现有的df中创建一个新列。通过groupby和滚动总和的组合来创建新列的值。我该怎么做?

我尝试了两种方法都导致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(因为它是rolling(4)),之后取一个值,例如:


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

1 个答案:

答案 0 :(得分:0)

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

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分组会在第1级添加一个ngroup值,并将原始索引保留在第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

Drop level = 0以确保与原始索引对齐。您的原始索引不应重复,否则会得到ValueError