【问题标题】:Pandas: sum of values in one dataframe based on the group in a different dataframePandas:基于不同数据帧中的组的一个数据帧中的值总和
【发布时间】:2019-12-21 23:05:35
【问题描述】:

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

  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())]  

我正在寻找一种更有效的 pandas 方法来执行此操作,而不是遍历 group_by 下的每个扇区。最终的数据框应如下所示:

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

感谢任何帮助。

【问题讨论】:

  • 你能发布你预期的输出数据框应该是什么样子

标签: python pandas dataframe pandas-groupby


【解决方案1】:

您可以将符号列map 划分为扇区并使用该系列进行分组。

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

【讨论】:

  • 不错的一个班轮!
【解决方案2】:

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

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

其中,df1 是带有 Sectors 的 df,而 df2 是带有 Positions 的 df。

【讨论】:

  • 会的。我会等一天,看看是否还有其他可能会有所改进的答案。感谢您的帮助
【解决方案3】:

让我们做merge

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

【讨论】:

  • 是的,我也选择了 -- pd.merge(df2, df1, on="Symbol").groupby('Sector')['Position'].sum().reset_index()
猜你喜欢
  • 2018-10-03
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2017-04-06
相关资源
最近更新 更多