>>> 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
如何添加总数百分比 例如-80 / 111,31 / 11 for ErrorCode 0等等
我试过
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
答案 0 :(得分:2)
我认为您需要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
的结果是一个系列,因此apply函数将逐个元素地运行。 (不是像pandas DataFrame那样在整个列上)。