Суммируйте все значения в столбце данных, сгруппированные по одному столбцу и зависящие от другого значения столбца. - PullRequest
0 голосов
/ 21 июня 2019

У меня есть номер для каждого человека в течение определенного месяца, представленный целым числом. Мне нужно добавить эти цифры для каждого человека до указанной даты для каждой строки. Я хотел бы использовать функцию apply в Python DataFrame, чтобы сделать его масштабируемым.

Например:

df = pd.DataFrame(
{'number': [10, 20 , 30, 40, 50], 'individual': ["John", "John" , "Eleonor", "Eleonor", "Eleonor"], 'date': [1, 2, 3, 4, 5]})

df =

   number individual  date
0      10       John     1
1      20       John     2
2      30    Eleonor     3
3      40    Eleonor     4
4      50    Eleonor     5

Я хочу суммировать числа, когда дата строго ниже, чем дата в строке, и поставить NA, если нет строки с датой, которая удовлетворяет условию. Здесь результат будет:

   number individual  date
0      NA       John     1
1      10       John     2
2      NA    Eleonor     3
3      30    Eleonor     4
4      70    Eleonor     5

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Я нашел решение с помощью метода apply, который был запрошен, который позволяет использовать с dask:

df['number'] = df.groupby("individual")['number'].apply(lambda x: x.expanding().sum().shift())

, что дает

   number individual  date
0     NaN       John     1
1    10.0       John     2
2     NaN    Eleonor     3
3    30.0    Eleonor     4
4    70.0    Eleonor     5
0 голосов
/ 21 июня 2019
df = pd.DataFrame({'num': [10, 20 , 30, 40, 50], 
                   'ind': ["John", "John" , "Eleonor", "Eleonor", "Eleonor"], 
                   'date': [1, 2, 3, 4, 5]})

df['x'] = df.groupby('ind')['num'].shift()
df['y'] = df.groupby('ind')['x'].cumsum()
print(df)

урожайность

   num      ind  date     x     y
0   10     John     1   NaN   NaN
1   20     John     2  10.0  10.0
2   30  Eleonor     3   NaN   NaN
3   40  Eleonor     4  30.0  30.0
4   50  Eleonor     5  40.0  70.0
...