Сгруппировать и добавить новый вычисляемый столбец в Python - PullRequest
0 голосов
/ 15 октября 2018

У меня есть этот DataFrame в Python (предположим, что он отсортирован):

Col1 Col2 Col3
a    1    2
a    2    3
a    4    6
b    3    7
b    5    1

, и я хочу добавить новый столбец с именем Col4, где каждое значение является добавлением текущего Col3 и предыдущей строки Col3.

Он должен запустить эту логику, сгруппировав Col1, и если это первая строка в группе, он использует только текущее значение Col3.

Таким образом, оно должно выглядеть следующим образом:

Col1 Col2 Col3 Col4
a    1    2    2 (i.e. 2 - it is the first in first row group)
a    2    3    5 (i.e. 2+3)
a    4    6    9 (i.e. 3+6)
b    3    7    7 (i.e. 7 - it is the first row in second group)   
b    5    1    8 (i.e. 7+1)

Как это можно сделать на Python (надеюсь, с использованием groupBy)?

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы можете использовать shift для группы:

df['Col4'] = df['Col3'] + df.groupby('Col1')['Col3'].shift(1).fillna(0)

>>> df
  Col1  Col2  Col3  Col4
0    a     1     2   2.0
1    a     2     3   5.0
2    a     4     6   9.0
3    b     3     7   7.0
4    b     5     1   8.0
0 голосов
/ 15 октября 2018

Используя rolling sum

df['col4']=df.groupby('Col1').Col3.rolling(2,min_periods=1).sum().values.astype(int)
df
Out[105]: 
  Col1  Col2  Col3  col4
0    a     1     2     2
1    a     2     3     5
2    a     4     6     9
3    b     3     7     7
4    b     5     1     8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...