gpt4 book ai didi

python - 将函数应用于 pandas 中的分组数据计数

转载 作者:行者123 更新时间:2023-12-01 03:11:49 25 4
gpt4 key购买 nike

>>> new_confirmIOC.groupby(['ErrorCode','ResponseType']).OrderID.count()
ErrorCode ResponseType
0 CANCEL_ORDER_CONFIRM 80
TRADE_CONFIRM 31
1 CANCEL_ORDER_CONFIRM 80
TRADE_CONFIRM 31

如何添加占总数的百分比例如,ErrorCode 0 为 80/111、31/111 等

我试过了

new_confirmIOC.groupby(['ErrorCode','ResponseType']).OrderID.count().apply(lambda x: x / x.sum())

但它给了我

ErrorCode  ResponseType        
0 CANCEL_ORDER_CONFIRM 1
TRADE_CONFIRM 1
1 CANCEL_ORDER_CONFIRM 1
TRADE_CONFIRM 1
Name: OrderID, dtype: int64

最佳答案

我认为您需要按第一级进行groupby并除以sum:

df = new_confirmIOC.groupby(['ErrorCode','ResponseType']).OrderID.count()
df = df.groupby(level='ErrorCode').apply(lambda x: x / x.sum())
print (df)
ErrorCode ResponseType
0 CANCEL_ORDER_CONFIRM 0.720721
TRADE_CONFIRM 0.279279
1 CANCEL_ORDER_CONFIRM 0.720721
TRADE_CONFIRM 0.279279
Name: val, dtype: float64

另一个解决方案 transform :

df = df.div(df.groupby(level='ErrorCode').transform('sum'))
print (df)
ErrorCode ResponseType
0 CANCEL_ORDER_CONFIRM 0.720721
TRADE_CONFIRM 0.279279
1 CANCEL_ORDER_CONFIRM 0.720721
TRADE_CONFIRM 0.279279
Name: val, dtype: float64

谢谢FLab评论:

.count 的结果是一个 Series,因此 apply 函数将逐个元素进行操作。 (不像 pandas DataFrame 那样在整个列上)。

关于python - 将函数应用于 pandas 中的分组数据计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42834664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com