Создайте промежуточный итог с несколькими столбцами в Python

avatar
Lynn
9 августа 2021 в 02:34
122
1
0

У меня есть набор данных, в котором я хотел бы суммировать несколько столбцов, а затем создать несколько столбцов с промежуточным итогом. Вывод должен быть сгруппирован по идентификатору и дате.

Данные

id  date    t1  t2  total   start   curr_t2 curr_t2 
a   q1 22   4   1   5       50      25      20  
a   q2 22   1   1   2       50      25      20  
a   q3 22   0   0   0       50      25      20  
b   q1 22   5   5   10      100     30      40  
b   q2 22   2   2   4       100     30      70  
b   q3 22   3   4   7       100     30      70  

Желаемый

id  date    t1  t2  total   start   cur_t1  cur_t2  final   finalt1 finalt2
a   q1 22   4   1   5       50      25      20      55      29      21
a   q2 22   1   1   2       50      25      20      57      30      22
a   q3 22   0   0   0       50      25      20      57      30      22
b   q1 22   5   5   10      100     30      40      110     35      27
b   q2 22   2   2   4       100     30      70      114     37      29
b   q3 22   3   4   7       100     30      70      121     40      33


**Logic:**

sum the 'start' and 'total' column to create the 'final' column
however, final column is a running total, adding to the 'total' column.

EX.

start = 50 total = 5 so final = 55
then
the next row we have a total of 2 , so the final for the next row is 57 

Similar logic with the newly created: finalt1 and finalt2

и т.д.

Выполняется

Думаю, мне нужно использовать функцию .cumsum для получения желаемого результата Вывод должен быть сгруппирован по идентификатору и дате

out['final'] = out['final'].sub(out.groupby('id')['start'].cumsum())

Однако эти выходные данные не группируются по модулям и дате. Я все еще изучаю, любые предложения приветствуются.

Источник
mozway
9 августа 2021 в 02:37
1

можешь объяснить логику расчетов?

Lynn
9 августа 2021 в 02:38
0

обязательно обновлю пост

Ответы (1)

avatar
BENY
9 августа 2021 в 02:40
1

Попробовать с

df['final'] = df['start'].add(df.groupby('id')['total'].cumsum())
df['final1'] = df['t1'].add(df.groupby('id')['curr_t1'].cumsum())
df['final2'] = df['t2'].add(df.groupby('id')['curr_t2'].cumsum())
Lynn
9 августа 2021 в 03:01
0

Привет, @BENY, спасибо, первый cumsum работает, но для столбцов «final1» и «final2» он не берет кумулятивную сумму, он работает только для этой первой строки. Я думаю, что он должен быть сгруппирован как по «идентификатору», так и по «дате», чтобы работать?

Lynn
9 августа 2021 в 03:12
0

хорошо, его просто нужно переставить, и он работает: df['final1'] = df['curr_t1'].add(df.groupby('id')['t1'].cumsum())