在 Pandas 中将分类数据转换为数字百分比
Posted
技术标签:
【中文标题】在 Pandas 中将分类数据转换为数字百分比【英文标题】:Convert Categorical data to numeric percentage in Pandas 【发布时间】:2019-05-02 12:29:26 【问题描述】:我有一个这样的数据框,所有分类值:
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
我尝试了数据透视表,它只给我列的每个值的计数,但如何以百分比形式获得它?
提前致谢。
【问题讨论】:
Sort a Dataframe and count a value with percentages的可能重复 【参考方案1】:您希望对两个因子(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
【讨论】:
感谢您的快速帮助。我正在尝试数据透视表并尝试创建一个 lambda 函数。 np!如果它解决了您的问题,请不要忘记接受答案:) 如何将 2 列作为索引?以上是关于在 Pandas 中将分类数据转换为数字百分比的主要内容,如果未能解决你的问题,请参考以下文章