Как создать новый столбец со значениями после groupby & rollingsum? - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь создать новый столбец в существующем df.Значения нового столбца создаются комбинацией групповой и скользящей суммы.Как мне это сделать?

Я пробовал два подхода, которые приводят либо к значениям 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

1 Ответ

0 голосов
/ 26 апреля 2019

Для обеспечения выравнивания по исходному (не дублированному) индексу:

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

Drop level = 0, чтобы обеспечить выравнивание по исходному индексу. Ваш оригинальный индекс не должен дублироваться, иначе вы получите ValueError.

...