如何使用pandas groupby函数来应用基于groupby值的公式?[英] How do I use pandas groupby function to apply a formula based on the groupby value

本文是小编为大家收集整理的关于如何使用pandas groupby函数来应用基于groupby值的公式?的处理方法,想解了如何使用pandas groupby函数来应用基于groupby值的公式?的问题怎么解决?如何使用pandas groupby函数来应用基于groupby值的公式?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我的问题可能有些混乱,所以让我解释一下.我有一个信息框架的数据框,我想按照唯一的订单ID进行分组,该ID将产生以下列:

sum qty =每个订单ID执行的总金额. CSV =这是每个订单ID的CSV列的总和,除以订单ID的执行金额.

第一列很容易使用GroupBy创建,这是我遇到的第二列.这是我正在使用的示例数据:

    qty     sym     price   ordrefno    ord_bidprice    ord_askprice    csv
0   -25000  TEST    0.044   984842      0.0435          0.044          12.5
1   100     TEST    0.0443  984702      0.0435          0.044          0.03
2   -10000  TEST    0.0405  983375      0.039           0.0405         15
3   -100    TEST    0.0443  984842      0.0435          0.044          0.03

这是我的代码:

cs1 = lambda x: np.sum(test.csv / test.qty)
f2 = {'qty' : ['sum'], 'csv' : {'es' : cs1}}

agg_td = trades.groupby('ordrefno').agg(f2)

推荐答案

编写一个命名函数并使用apply作品:

def func(group):
    sum_ = group.qty.sum()
    es = (group.csv / group.qty).sum()
    return pd.Series([sum_, es], index=['qty', 'es'])

trades.groupby('ordrefno').apply(func)

结果:

            qty     es
ordrefno               
983375   -10000 -0.0015
984702      100  0.0003
984842   -25100 -0.0008

其他推荐答案

假设您需要总和的比率,而不是比率的总和(措辞的措辞暗示了这一点,但是您代码中的函数将在应用于DF的情况下给出比率的总和),我认为最干净的方法是分两个步骤.首先只获取两列的总和,然后分开:

agg_td = trades.groupby('ordrefno')[['qty', 'csv']].sum()
agg_td.eval('es = csv/qty')

您还可以创建一个特殊的功能并将其传递给Groupby apply方法:

es = trades.groupby('ordrefno').apply(lambda df: df.csv.sum() / df.qty.sum()) 

,但这只会让您获得'es'列.使用agg的问题在于,函数的dist是特定于列的特定的,在这里您需要组合两列.

本文地址:https://www.itbaoku.cn/post/1728188.html