熊猫计算比率作为数据透视表中的值

时间:2020-07-02 11:06:43

标签: python pandas pivot-table crosstab

我有一个Df,看起来像这样:

    tests  Machine  results
    111    A        OK
    111    A        OK
    111    A        OK
    111    A        NOK
    111    B        OK
    222    A        OK
    333    A        OK
    333    B        OK
    444    A        OK
    222    A        NOK
    222    A        OK
    111    B        OK

我想要一个矩阵/数据透视表,其中行应该是测试,列应该是机器,值应该是可以与每台机器的测试总数相对应的测试比率/百分比。

结果应为:

   OK/total cnt  A     B
   111           75%   100%   #test 111 passed 3 out of 4 tests in machine A and all tests in B
   222           50%   0%     #test 222 passed 1 out of 2 tests in machine A and 0 tests prfrmd in B
   333           100%  100%   #test 333 passed all tests in A and B machines

请帮助我。

2 个答案:

答案 0 :(得分:2)

获取等于OK的行的列,然后运行crosstab以获取平均值

df = df.assign(passed=df.results.eq("OK"))

(
    pd.crosstab(df.tests, df.Machine, df.passed, aggfunc="mean")
    .rename_axis(columns=None, index="OK/total cnt")
    .mul(100, fill_value=0)
)

                  A           B
OK/total cnt        
  111           75.000000   100.0
  222           66.666667   0.0
  333          100.000000   100.0
  444          100.000000   0.0

答案 1 :(得分:1)

通过DataFrame.assign创建新列,并使用Series.eq比较OK,然后默认使用DataFrame.pivot_table中的mean方法进行透视,以{{1} },最后将索引转换为100

column