Python Pandas:基于不同数据帧中的组的一个数据帧中的值之和

Python Pandas:基于不同数据帧中的组的一个数据帧中的值之和,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个这样的数据框架,其中包含公司及其部门 Symbol Sector 0 MCM Industrials 1 AFT Health Care 2 ABV Health Care 3 AMN Health Care 4 ACN Information Technology 我有另一个数据框,其中包含了公司及其职位 Symbol Po

我有一个这样的数据框架,其中包含公司及其部门

  Symbol             Sector
0    MCM             Industrials
1    AFT             Health Care
2    ABV             Health Care
3    AMN             Health Care
4    ACN  Information Technology
我有另一个数据框,其中包含了公司及其职位

  Symbol  Position
0    ABC  1864817
1    AAP -3298989
2    ABV -1556626
3    AXC  2436387
4    ABT   878535 
我想要的是得到一个包含扇区聚合位置的数据帧。因此,将给定行业中所有公司的头寸相加。我可以单独做这件事

df2[df2.Symbol.isin(df1.groupby('Sector').get_group('Industrials')['Symbol'].to_list())]  
我正在寻找一种更有效的方法来实现这一点,而不是在group_by下的每个部门循环。最终的数据帧应如下所示:

     Sector                  Sum Position
0    Industrials             14567232
1    Health Care            -329173249
2    Information Technology -65742234
3    Energy                  6574352342
4    Pharma                  6342387658

感谢您的帮助

如果我正确理解了这个问题,一种方法是连接两个数据帧,然后按扇区分组并对位置列求和,如下所示:

df_agg = df1.join(df2['Position']).drop('Symbol', axis=1)
df_agg.groupby('Sector').sum()

其中,df1是带扇区的df,df2是带位置的df。

您可以
将符号列映射到扇区,并使用该序列进行分组

df2.groupby(df2.Symbol.map(df1.set_index('Symbol').Sector)).Position.sum()

让我们只做
merge

df2.merge(df1,how='left').groupby('Sector').Position.sum()

你能发布你期望的输出数据框应该是什么样子吗。我会等一天,看看是否有其他的答案,可能是一个改善。谢谢你的帮助,漂亮的一行!是的,我还使用了--pd.merge(df2,df1,on=“Symbol”).groupby('Sector')['Position'].sum().reset_index()