pandas 在单独的列中计算单个列值的百分比

kjthegm6  于 2023-02-02  发布在  其他
关注(0)|答案(2)|浏览(131)

对于以下 Dataframe :

person  choice
0  A       1
1  A       2
2  A       1
3  B       3
4  B       3
5  B       2
6  B       1
7  C       2

我怎么知道每个人选择的百分比?
输出应该如下所示:

person  choice_1_count choice_2_count choice_3_count  total
A                    2              1              0      3 
B                    1              1              2      4
C                    0              1              0      1

用于计算百分比:

person  choice_1_percent  choice_2_percent  choice_3_percent
A                  66.67             33.33              0.00
B                  25.00             25.00             50.00
C                   0.00            100.00              0.00

最终 Dataframe 的格式很重要,例如在排序和绘制百分比列以及进一步分析时。

elcex8rz

elcex8rz1#

让我们使用crosstab来计算频数表,使用normalizeindex轴来计算百分比

dist = pd.crosstab(df['person'], df['choice'], normalize='index') * 100

结果

choice          1           2     3
person                             
A       66.666667   33.333333   0.0
B       25.000000   25.000000  50.0
C        0.000000  100.000000   0.0

然后你可以画出百分比

dist.plot(kind='bar')

qpgpyjmq

qpgpyjmq2#

df = pd.DataFrame(df.value_counts(['person', 'choice']).sort_index(), columns=["count"])
df["percent"] = df["count"]/df.groupby('person')['count'].transform('sum')

相关问题