我有一个 4 列 6 行的 pandas 数据框。例如:
Healthy state_A state_B state_C
0: Yes 0 1 1
1: No 0 1 0
2: Yes 0 0 1
3: Yes 0 0 1
4: No 0 0 0
5: No 0 0 1
现在我想绘制一个条形图。每个状态列的总和应为一根柱(即,state_A 的总和应对应于一根柱,state_B 的总和应对应于一根柱,state_C 的总和应对应于一根柱)。此外,我想按“健康”列对它们进行分组,即每个条形图都应该分层。例如,state_C 条的高度为 4(总和为 4),它应该由两种颜色组成(一种颜色的高度为 3,因为我们有 3 个 Healty==Yes,另一种颜色的高度为 1,因为我们有一个 Healty==否)。
如何做到这一点?
最佳答案
不确定我是否正确理解了您的意思,但我会尝试。
示例数据:
(列顺序并不重要)
A B C Healthy
0 0 1 1 Yes
1 0 1 0 No
2 0 0 1 Yes
3 0 0 1 Yes
4 0 0 0 No
5 0 0 1 No
图表:
import pandas as pd
data = {'Healthy': {0: 'Yes', 1: 'No', 2: 'Yes', 3: 'Yes', 4: 'No', 5: 'No'},
'A': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0},
'B': {0: 1, 1: 1, 2: 0, 3: 0, 4: 0, 5: 0},
'C': {0: 1, 1: 0, 2: 1, 3: 1, 4: 0, 5: 1}}
# create data frame from sample data
df = pd.DataFrame(data)
# sum by state
df_sum = df.sum(numeric_only=True)
# sum group by state
df_gby = df.groupby(['Healthy']).sum(numeric_only=True)
# plot sum
df_sum.plot.bar()
# plot gby sum
df_gby.transpose().plot.bar(stacked=True)
聚合结果:
# df_sum
A 0
B 2
C 4
# df_gby
A B C
Healthy
No 0 1 1
Yes 0 1 3
图像/图表:
关于python - 基于 pandas 中的列的分层条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768691/