Pandas взять значение строки ниже
Всем привет. Есть такая модель реальных данных:
C S E D
1 1 3 0 0
2 1 5 0 0
3 1 6 0 0
4 2 1 0 0
5 2 3 0 0
6 2 7 0 0
С - category, S - start, E - end, D - delta
Нужно при помощи pandas в столбец Е занести значение столбца S с условием id = id+1, причем последнее значение Е категории равно значению из столбца S той же строки Получается:
C S E D
1 1 3 5 0
2 1 5 6 0
3 1 6 6 0
4 2 1 3 0
5 2 3 7 0
6 2 7 7 0
И затем вычесть S из Е и занести это в D. Это, в принцпе, легко. Сложность именно с заполнением столбца E
В итоге получается это:
C S E D
1 1 3 5 2
2 1 5 6 1
3 1 6 6 0
4 2 1 3 2
5 2 3 7 4
6 2 7 7 0
Ответы (1 шт):
Автор решения: Konstantin Skokov
→ Ссылка
df['E'] = df.groupby('C')['S'].shift(-1).fillna(df['S']).astype(int)
df['D'] = df['E'] - df['S']
или
df = df.assign(E = df.groupby('C')['S'].shift(-1).fillna(df['S']).astype(int),
D = lambda x: x['E'] - x['S'])