【问题标题】:pandas: find the category difference between groupspandas:查找组之间的类别差异
【发布时间】:2018-10-01 17:03:01
【问题描述】:

我有以下代码:

df.groupby('result')['col_A'].value_counts(normalize = True),输出如下:

Won    X                        0.500000
       Y                        0.437500
       Z                        0.062500
Lost   X                        0.693878
       Y                        0.204082
       Z                        0.102041

我需要找到两组(Won,Lost)之间每个类别(X,Y,Z)的差异总和。即

diff =  abs(0.500000 - 0.693878) + abs(0.437500 - 0.204082) + abs(0.062500 - 0.102041)

除了输出值,然后逐个元素地进行计算,有没有一种优雅的方法可以直接在熊猫中实现这一点?谢谢!

【问题讨论】:

    标签: python-2.7 pandas aggregate pandas-groupby


    【解决方案1】:

    让我们试试吧:

    (df.loc['Won'] - df.loc['Lost']).abs().sum().values[0]
    

    输出:

    0.466837
    

    【讨论】:

    • 这里的df是原df?我们在哪里指定'col_A'?谢谢!
    • 哦,对不起... df 这里是问题中给出的 groupby 的结果。
    • 但是 type(df.groupby('result')['col_A'].value_counts(normalize = True) ) 是 ... 所以哪个我应该将部分转换为数据框吗?谢谢!
    • 如果我这样做: df_gp = df.groupby('result')['col_A'].value_counts(normalize = True) ).to_frame() ,然后 (df.loc['Won'] - df.loc['Lost']).abs().sum().values[0] 给出错误:'numpy.ndarray' 对象不可调用
    • 如果只是这样做,它似乎有时会起作用:(df.loc['Won'] - df.loc['Lost']).abs().sum()。但有时它会失败,因为 df.loc['Won'] 和 df.loc['Lost'] 中的类别顺序不同......有没有办法让它们的顺序一致?
    猜你喜欢
    • 2023-01-16
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2018-03-20
    • 2020-01-11
    相关资源
    最近更新 更多