У меня есть панды dataframe
:
df = pd.DataFrame(data={'Name':['John', 'John', 'John', 'Jill', 'Jill', 'Jill', 'Jill'],'Score':[1,1, 1,2,2, 2, 2]})
df
Out[168]:
Name Score
0 John 1
1 John 1
2 John 1
3 Jill 2
4 Jill 2
5 Jill 2
6 Jill 2
Я хочу добавить столбец, содержащий скользящую сумму двух предыдущих значений в столбце (здесь столбец score
), например:
Out[171]:
Name Score Total
0 John 1 1
1 John 1 2
2 John 1 2
3 Jill 2 2
4 Jill 2 4
5 Jill 2 4
6 Jill 2 4
Я пробовал groupby
и rolling
, которые работают, но порядок строк отличается от исходного dataframe
. Обратите внимание, что Jill
теперь стоит первым, вероятно, из-за некоторой сортировки по алфавиту:
df.groupby('Name')['Score'].rolling(2, min_periods=1).sum()
Out[173]:
Name
Jill 3 2.0
4 4.0
5 4.0
6 4.0
John 0 1.0
1 2.0
2 2.0
Name: Score, dtype: float64
Как это работает и как я могу достичь цели, не выполняя после этого левое соединение/слияние?
df.groupby('Name',sort=False)['Score'].rolling(2, min_periods=1).sum()
? скажите groupby не сортировать - person anky   schedule 20.04.2020.reset_index(name='Total')
в конце - person ansev   schedule 20.04.2020