#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, может быть, пометить его?