我正在寻找一种将每列中的熊猫值计数制成表格的表格。我已经找到一种实现我想要的东西的方法,但是熊猫必须有更好的方法来做到这一点。
数据框具有多个测试步骤,每次测试运行都带有“ P”,“ F”或“”数据。
step1 = list('PPFP PFP ')
step2 = list('PFFP FPF')
step3 = list(' PPPFFPFP')
step4 = list(' PPFPF PP')
df = pd.DataFrame({'step1': step1,'step2':step2, 'step3':step3,'step4':step4})
step1 step2 step3 step4
0 P P
1 P F P P
2 F F P P
3 P P P F
4 F P
5 P F F
6 F F P
7 P P F P
8 F P P
我正在寻找的输出是:
step1 step2 step3 step4
P 5 3 5 5
F 2 4 3 2
2 2 1 2
我已经能够通过遍历每一列,执行value_counts然后将其附加到输出数组来解决此问题,但这似乎很笨拙。
df2 = pd.DataFrame(index=['P', 'F', ' '])
for i in range(len(df.columns)):
df2[df.columns.tolist()[i]] = df.iloc[:, i].value_counts(dropna=False)
有没有更优雅的方式来实现这一目标?
答案 0 :(得分:2)
将DataFrame.apply
与value_counts
一起使用:
df2 = df.apply(pd.value_counts)
print (df2)
step1 step2 step3 step4
2 2 1 2
F 2 4 3 2
P 5 3 5 5
对于行的更改顺序,请按预期顺序按列表中索引中所有值的列表添加DataFrame.reindex
:
df2 = df.apply(pd.value_counts).reindex([' ','P','F'])
print (df2)
step1 step2 step3 step4
2 2 1 2
P 5 3 5 5
F 2 4 3 2