Конечные кумулятивные значения с использованием Python

#python #pandas #numpy

Вопрос:

Я хотел бы выполнить конкретный расчет по столбцам: pwr — база финал, чтобы создать столбец «используется». Однако это должно быть сгруппировано по идентификатору и дате. Как только будет установлено первое вычисление, второе вычисление будет суммироваться с вновь созданным используемым столбцом. Что будет: используемый столбец окончательный для каждой строки даты.

Данные

 pwr pos id  date    base    position    final   
100 40  aa  q121    50     20           15  
100 40  aa  q221    50     20           25  
100 40  aa  q321    50     20           10  
100 40  aa  q421    50     20           5   
50  30  bb  q121    25     10           0   
50  30  bb  q221    25     10           10  
                            
 

Желанный

 pwr pos id  date    base    position    final   used
100 40  aa  q121    50      20          15      65
100 40  aa  q221    50      20          25      90
100 40  aa  q321    50      20          10      100
100 40  aa  q421    50      20          5       105
50  30  bb  q121    25      10          0       25
50  30  bb  q221    25      10          10      35
 

Делающий

 df['used'] =  df['pwr'].sub(df.groupby('id')['date'].cumsum()).sub(df.groupby('id')['base'].cumsum()).add(df.groupby('id')['final'].cumsum())
 

Однако последний столбец вычисляется неправильно. Любое предложение приветствуется.

Ответ №1:

Нам нужно сначала найти первый предмет , сделать все repeated значение для НаН , а затем перейти к groupby cumsum

 s = df['pwr'].sub(df['base']).mask(df['id'].duplicated()).add(df['final'],fill_value=0)

df['new'] = s.groupby(df['id']).cumsum()
df
   pwr  pos  id  date  base  position  final    new
0  100   40  aa  q121    50        20     15   65.0
1  100   40  aa  q221    50        20     25   90.0
2  100   40  aa  q321    50        20     10  100.0
3  100   40  aa  q421    50        20      5  105.0
4   50   30  bb  q121    25        10      0   25.0
5   50   30  bb  q221    25        10     10   35.0
 

Комментарии:

1. что делать, если мой столбец pwr помечен как «состояние pwr», как бы я это включил? Я сделал: df.[«состояние pwr»].sub…. но говорит, что недопустимо

2. @Lynn проверьте обновление

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

4. @georgehere, может быть, пометить его?