熊猫将跨多个列的值计数汇总到摘要数据框中

时间:2020-04-14 04:57:31

标签: python pandas aggregate unique

我正在寻找一种将每列中的熊猫值计数制成表格的表格。我已经找到一种实现我想要的东西的方法,但是熊猫必须有更好的方法来做到这一点。

数据框具有多个测试步骤,每次测试运行都带有“ 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)

有没有更优雅的方式来实现这一目标?

1 个答案:

答案 0 :(得分:2)

DataFrame.applyvalue_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