Панды рассчитывают столбец на основе другой строки - PullRequest
0 голосов
/ 24 октября 2019

Мне нужно вычислить столбец на основе другой строки. По сути, я хочу, чтобы мой new_column был суммой «base_column» для всех строк с одинаковым идентификатором.

В настоящее время я делаю следующее (но не очень эффективно), какой самый эффективный способ добиться этого?

def calculate(x):
   filtered_df = df[["id"] == dataset.at[x.name, "id"]] # in fact my filter is more complex basically same id and date in the last 4 weeks
   df.at[x.name, "new_column"] = filtered_df["base_column"].sum()

df.apply(calculate)

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы можете сделать ниже

df['new_column']= df.groupby('id')['base_column'].transform('sum')

ввод

    id  base_column
0   1   2
1   1   4
2   2   5
3   3   6
4   5   7
5   7   4
6   7   5
7   7   3

вывод

    id  base_column     new_column
0   1             2     6
1   1             4     6
2   2             5     5
3   3             6     6
4   5             7     7
5   7             4     12
6   7             5     12
7   7             3     12
0 голосов
/ 24 октября 2019

Другой способ сделать это - использовать groupby и merge

import pandas as pd

df = pd.DataFrame({'id':[1,1,2],'base_column':[2,4,5]})
# compute sum by id
sum_base =df.groupby("id").agg({"base_column": 'sum'}).reset_index().rename(columns={'base_column':'new_column'})
# join the result to df
df = pd.merge(df,sum_base,how='left',on='id')

 # id   base_column new_column
 #0 1   2   6
 #1 1   4   6
 #2 2   5   5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...