У меня есть следующий фрейм данных:
a = [1,2,3,4,5,6,7,8]
x1 = ['j','j','j','k','k','k','k','k']
df = pd.DataFrame({'a': a,'b':x1})
print(df)
a b
1 j
2 j
3 j
4 k
5 k
6 k
7 k
8 k
Я пытаюсь получить сумму значений "a" для следующих n строк, сгруппированных в столбце "b", и сохранить ее в новых столбцах (для n в диапазоне отС 1 по 4).
По сути, я хочу получить четыре новых столбца c1, c2, c3 и c4, в которых c1 имеет сумму «следующих 1» a, c2 имеет сумму «следующих 2» a, c3 имеет сумму«следующие 3» а и с4 имеют сумму «следующих 4» а.
Поэтому мой желаемый результат:
a b c1 c2 c3 c4
1 j 2.0 5.0 NaN NaN
2 j 3.0 NaN NaN NaN
3 j NaN NaN NaN NaN
4 k 5.0 11.0 18.0 26.0
5 k 6.0 13.0 21.0 NaN
6 k 7.0 15.0 NaN NaN
7 k 8.0 NaN NaN NaN
8 k NaN NaN NaN NaN
Я искал решения, и лучшее, что я могу придумать, это что-тонапример:
for x in range(1,5):
df[x] = df.groupby(['b'])a[::-1].rolling(x+1).sum()[::-1] - a
, но этот синтаксис выдает ошибки.
Если возможно, вы также можете поделиться, как реализовать, если мне нужно сгруппировать по нескольким полям.Буду очень признателен за любую помощь.
Спасибо.