Python 根据其他行计算列

Python 根据其他行计算列,python,pandas,Python,Pandas,我需要根据另一行计算一列。基本上,我希望我的新列是具有相同id的所有行的“基本列”之和 我目前正在做以下工作(但不是真正有效的)实现这一目标最有效的方法是什么 def计算(x): filtered_df=df[[“id”]==dataset.at[x.name,“id”].#事实上,我的过滤器更复杂,在过去的4周里,基本上相同的id和日期 df.at[x.name,“new_column”]=filtered_df[“base_column”].sum() 应用(计算) 另一种方法是使用grou

我需要根据另一行计算一列。基本上,我希望我的新列是具有相同id的所有行的“基本列”之和

我目前正在做以下工作(但不是真正有效的)实现这一目标最有效的方法是什么

def计算(x):
filtered_df=df[[“id”]==dataset.at[x.name,“id”].#事实上,我的过滤器更复杂,在过去的4周里,基本上相同的id和日期
df.at[x.name,“new_column”]=filtered_df[“base_column”].sum()
应用(计算)

另一种方法是使用
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
你可以在下面做一个练习

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
输出

    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

你的问题是什么?