gpt4 book ai didi

python - 将分类数据转换为 Pandas 中的数字百分比

转载 作者:行者123 更新时间:2023-12-01 01:23:31 43 4
gpt4 key购买 nike

我有一个像这样的数据框,所有分类值:

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

我尝试了数据透视表,它只提供列中每个值的计数,但如何以百分比形式获取它?

提前致谢。

最佳答案

您想要对两个因素(col1col2)进行交叉制表,并在每行上标准化频率。为此,您可以使用 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/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com