【问题标题】:Sum product and groupby对产品和分组求和
【发布时间】:2018-11-23 07:22:16
【问题描述】:

我有一个如下所示的数据框:

allHoldingsFund

      BrokerBestRate  notional_current  DistanceBestRate
0           CITI          7.859426e+05          0.023194
1           WFPBS         3.609674e+06         -0.023041
2           WFPBS         1.488828e+06         -0.023041
3           JPM           3.484168e+05         -0.106632
4           CITI          6.088499e+05          0.023194
5           WFPBS         8.665558e+06         -0.023041
6           WFPBS         4.219563e+05         -0.023041

我正在尝试一次完成求和乘积和分组(不创建额外的求和乘列)

这行代码我试过了

allHoldingsFund.groupby(['BrokerBestRate'])['notional_current']*['DistanceBestRate'].sum() 

如何进行求和,然后使用 group by 进行聚合?

期望的输出

BrokerBestRate      product of (notional_current  and DistanceBestRate)
   CITI              654654645665466
   JPM               453454534545367
  WFPBS              345345345345435

非常感谢

【问题讨论】:

  • 请发布您想要的输出。产品我了解,但是很不清楚你想要的总和那么。
  • 我已经更改了我的问题并添加了所需的输出
  • @SBad,这些数字是从您的数据中生成的吗?因为我没有得到你所拥有的任何东西。
  • 这些只是显示所需输出的示例......不是正确的数字......

标签: python python-3.x pandas group-by sum


【解决方案1】:

最简单但通常最慢的方法是使用apply

In [43]: df.groupby("BrokerBestRate").apply(lambda x: x.prod(axis=1).sum())
Out[43]: 
BrokerBestRate
CITI      32350.817245
JPM      -37152.380218
WFPBS   -326860.001568
dtype: float64

但是你也可以先计算出产品列,然后在那个上调用groupby:

In [44]: df.eval("notional_current * DistanceBestRate").groupby(df.BrokerBestRate).sum()
Out[44]: 
BrokerBestRate
CITI      32350.817245
JPM      -37152.380218
WFPBS   -326860.001568
dtype: float64

In [45]: df[["notional_current", "DistanceBestRate"]].prod(axis=1).groupby(df["BrokerBestRate"]).sum()
Out[45]: 
BrokerBestRate
CITI      32350.817245
JPM      -37152.380218
WFPBS   -326860.001568
dtype: float64

【讨论】:

    【解决方案2】:

    您可以在groupby之前建立产品列

    df.assign(col=df.notional_current*df.DistanceBestRate).groupby('BrokerBestRate',as_index=False).col.sum()
    Out[372]: 
      BrokerBestRate            col
    0           CITI   32350.817245
    1            JPM  -37152.380218
    2          WFPBS -326860.001568
    

    【讨论】:

    • @SBad yw :-) 快乐编码
    猜你喜欢
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多