我有一个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
请帮助我。
答案 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