我有一个这样的数据框,所有分类值:
col1 col2
0 A x
1 A y
2 A x
3 A z
4 A z
5 A z
6 B x
7 B y
8 B x
我想将其按“ col1”分组,并获得在不同列中获得“ col2”值的时间百分比。喜欢:
col1 x y z
0 A 33.33 16.67 50.0
1 B 66.67 33.37 0.0
我尝试了数据透视表,该数据透视表仅给我列的每个值的计数,但是如何以百分比的形式获取呢?
提前致谢。
最佳答案
您想对两个因子(col1
和col2
)进行交叉制表,并将每行的频率归一化。为此,您可以在pd.crosstab()
设置为normalize
的情况下使用index
:
>> df = pd.DataFrame({'col1': list('aaaaaabbb'), 'col2': list('xyxzzzxyx')})
>> pd.crosstab(df['col1'], df['col2'], normalize='index') * 100
col2 x y z
col1
a 33.333333 16.666667 50.0
b 66.666667 33.333333 0.0
如果要使用多个因素,只需调用
crosstab
并列出一系列因素:>> df['col3'] = list('112231345')
>> pd.crosstab([df['col1'], df['col3']], df['col2'], normalize='index') * 100
col2 x y z
col1 col3
a 1 33.333333 33.333333 33.333333
2 50.000000 0.000000 50.000000
3 0.000000 0.000000 100.000000
b 3 100.000000 0.000000 0.000000
4 0.000000 100.000000 0.000000
5 100.000000 0.000000 0.000000
如果您想四舍五入,只需致电
round
:>> round(pd.crosstab(df['col1'], df['col2'], normalize='index') * 100, 2)
col2 x y z
col1
a 33.33 16.67 50.0
b 66.67 33.33 0.0
关于python - 将分类数据转换为 Pandas 中的数字百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53556031/