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

Fiz*_*izi 4 python dataframe pandas pandas-groupby

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

  Symbol             Sector
0    MCM             Industrials
1    AFT             Health Care
2    ABV             Health Care
3    AMN             Health Care
4    ACN  Information Technology
Run Code Online (Sandbox Code Playgroud)

我有另一个数据框,其中包含公司及其职位

  Symbol  Position
0    ABC  1864817
1    AAP -3298989
2    ABV -1556626
3    AXC  2436387
4    ABT   878535 
Run Code Online (Sandbox Code Playgroud)

我想要的是获得一个包含扇区聚合位置的数据框。因此,总结给定部门中所有公司的头寸。我可以通过以下方式单独执行此操作

df2[df2.Symbol.isin(df1.groupby('Sector').get_group('Industrials')['Symbol'].to_list())]  
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更有效的熊猫方法来做到这一点,而不是遍历 group_by 下的每个扇区。最终的数据框应如下所示:

     Sector                  Sum Position
0    Industrials             14567232
1    Health Care            -329173249
2    Information Technology -65742234
3    Energy                  6574352342
4    Pharma                  6342387658
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

Raf*_*aJM 5

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

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

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


ALo*_*llz 5

您可以map将符号列分割并使用该系列进行分组。

df2.groupby(df2.Symbol.map(df1.set_index('Symbol').Sector)).Position.sum()
Run Code Online (Sandbox Code Playgroud)