熊猫根据其他行计算列

时间:2019-10-24 00:27:09

标签: python pandas

我需要根据其他行计算一列。基本上,我希望我的new_column是具有相同ID的所有行的“ 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 :(得分:0)

另一种方法是使用groupbymerge

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

答案 1 :(得分:0)

您可以执行以下操作

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