我有这样的问题:
这是文件:https://archive.ics.uci.edu/ml/machine-learning-databases/autos/
我应该在列的优先结构中总结列,但我不能。我只得到行的总和。
我做这样的代码:

pd.crosstab(index=df.make, columns=df.body_style, normalize='columns',margins=True).applymap('{:.2f}%'.format)


我只有这个:
python - 汇总交叉表中列的百分比结构中的列?-LMLPHP

我需要汇总列而不是行

最佳答案

我相信您需要normalize='index'参数:

df = pd.crosstab(index=df.make, columns=df.body_style, normalize='index')
df['All'] = df.sum(axis=1)
print (df)

body_style     convertible   hardtop  hatchback     sedan     wagon  All
make
alfa-romero       0.666667  0.000000   0.333333  0.000000  0.000000  1.0
audi              0.000000  0.000000   0.142857  0.714286  0.142857  1.0
bmw               0.000000  0.000000   0.000000  1.000000  0.000000  1.0
chevrolet         0.000000  0.000000   0.666667  0.333333  0.000000  1.0
dodge             0.000000  0.000000   0.555556  0.333333  0.111111  1.0
honda             0.000000  0.000000   0.538462  0.384615  0.076923  1.0
isuzu             0.000000  0.000000   0.250000  0.750000  0.000000  1.0
jaguar            0.000000  0.000000   0.000000  1.000000  0.000000  1.0
mazda             0.000000  0.000000   0.588235  0.411765  0.000000  1.0
mercedes-benz     0.125000  0.250000   0.000000  0.500000  0.125000  1.0
mercury           0.000000  0.000000   1.000000  0.000000  0.000000  1.0
mitsubishi        0.000000  0.000000   0.692308  0.307692  0.000000  1.0
nissan            0.000000  0.055556   0.277778  0.500000  0.166667  1.0
peugot            0.000000  0.000000   0.000000  0.636364  0.363636  1.0
plymouth          0.000000  0.000000   0.571429  0.285714  0.142857  1.0
porsche           0.200000  0.400000   0.400000  0.000000  0.000000  1.0
renault           0.000000  0.000000   0.500000  0.000000  0.500000  1.0
saab              0.000000  0.000000   0.500000  0.500000  0.000000  1.0
subaru            0.000000  0.000000   0.250000  0.416667  0.333333  1.0
toyota            0.031250  0.093750   0.437500  0.312500  0.125000  1.0
volkswagen        0.083333  0.000000   0.083333  0.750000  0.083333  1.0
volvo             0.000000  0.000000   0.000000  0.727273  0.272727  1.0


要么:

df = pd.crosstab(index=df.make, columns=df.body_style, normalize='columns')
df.loc['All'] = df.sum(axis=0)
print (df)

body_style     convertible  hardtop  hatchback     sedan  wagon
make
alfa-romero       0.333333    0.000   0.014286  0.000000   0.00
audi              0.000000    0.000   0.014286  0.052083   0.04
bmw               0.000000    0.000   0.000000  0.083333   0.00
chevrolet         0.000000    0.000   0.028571  0.010417   0.00
dodge             0.000000    0.000   0.071429  0.031250   0.04
honda             0.000000    0.000   0.100000  0.052083   0.04
isuzu             0.000000    0.000   0.014286  0.031250   0.00
jaguar            0.000000    0.000   0.000000  0.031250   0.00
mazda             0.000000    0.000   0.142857  0.072917   0.00
mercedes-benz     0.166667    0.250   0.000000  0.041667   0.04
mercury           0.000000    0.000   0.014286  0.000000   0.00
mitsubishi        0.000000    0.000   0.128571  0.041667   0.00
nissan            0.000000    0.125   0.071429  0.093750   0.12
peugot            0.000000    0.000   0.000000  0.072917   0.16
plymouth          0.000000    0.000   0.057143  0.020833   0.04
porsche           0.166667    0.250   0.028571  0.000000   0.00
renault           0.000000    0.000   0.014286  0.000000   0.04
saab              0.000000    0.000   0.042857  0.031250   0.00
subaru            0.000000    0.000   0.042857  0.052083   0.16
toyota            0.166667    0.375   0.200000  0.104167   0.16
volkswagen        0.166667    0.000   0.014286  0.093750   0.04
volvo             0.000000    0.000   0.000000  0.083333   0.12
All               1.000000    1.000   1.000000  1.000000   1.00

关于python - 汇总交叉表中列的百分比结构中的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55535247/

10-13 01:22