我有两个数据框,一个是低层次的,一个是高层次的数据汇总。我想在汇总表中增加一个新的列,对所有是某项运动的球迷的总支出进行汇总。在足球的汇总行中,我不想对足球的总支出进行汇总,而是对任何在足球上花费的人的总体育支出进行汇总。
df = pd.DataFrame({'Person': [1,2,3,3,3],
'Sport': ['Soccer','Tennis','Tennis','Football','Soccer'],
'Ticket_Cost': [10,20,10,10,20]})
df2 = pd.DataFrame({'Sport': ['Soccer','Tennis','Football']})
我目前可以通过很多步骤来做这件事,但我确信有一个更有效/更快速的方法。 以下是我目前的做法。
#Calculate the total spend for each person in an temporary dataframe
df_intermediate = df.groupby(['Person'])['Ticket_Cost'].sum()
df_intermediate= df_intermediate.rename("Total_Sports_Spend")
人数 体育消费总额
1 10
2 20
3 40
#place this total in the detailed table
df = pd.merge(df,df_intermediate,how='left',on='Person')
#Create a second temporary dataframe
df_intermediate2 = df.groupby(['Sport'])['Total_Sports_Spend'].sum()
体育项目 总额_体育消费
Soccer 50
Tennis 60
#Merge this table with the summary table
df2 = pd.merge(df2,df_intermediate2,how='left',on='Sport')
体育项目 总额_体育消费
0 Soccer 50
1 Tennis 60
2 足球 40
最后,我清理了临时数据帧,并从详细表格中删除了多余的列。我相信有一个更好的方法。