我正在尝试在现有的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
答案 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
。