我有一个包含特定状态列的Excel工作表,我需要计算每个状态,然后我需要在条形图中绘制它。例如:
Status_1 Status_2 Status_3
Active Abandoned Active
Inactive Abandoned Active
目前我一直在使用以下代码:
import pandas as pd, matplotlib.pyplot as plt
report = r"\\Myserver\Reports\Report.xlsx"
df1 = pd.read_excel(report, sheetname=1)
df = df1[['Status_1', 'Status_2', 'Status_3']].copy()
val1 = df['Status_2'].value_counts().to_frame()
vals1 = pd.DataFrame(val1)
fig, axes = plt.subplots(nrows=2, ncols=2)
vals1.plot(kind='bar', ax=axes[0,0])
所以现在我的问题是图表显示正确,但X轴上的列标有其状态(活动/非活动),图例显示列名称(Status_1)。我希望将其颠倒过来,让X轴仅显示“Status_1”,并使用两种“Active”和“Inactive”选项对图例进行颜色编码。
因为我正在以价值计数这样做,所以它变得非常困惑并且转过身来。有没有办法做到这一点?
答案 0 :(得分:2)
您可以使用seaborn,同时将数据框重塑为tidy form
import seaborn as sns
import pandas as pd
In [26]: df
Out[26]:
Status_1 Status_2 Status_3
0 Active Abandoned Active
1 Inactive Abandoned Abandoned
2 Active Abandoned Active
3 Inactive Inactive Active
4 Active Abandoned Inactive
5 Abandoned Abandoned Active
In [27]: df2 = pd.melt(df) # convert into tidy data
In [28]: df2
Out[28]:
variable value
0 Status_1 Active
1 Status_1 Inactive
2 Status_1 Active
3 Status_1 Inactive
4 Status_1 Active
[...]
15 Status_3 Active
16 Status_3 Inactive
17 Status_3 Active
In [29]: sns.factorplot(data=df2, x="variable", kind="count", hue="value")
或者:
sns.factorplot(data=df2, x="variable", kind="count", col="value")
HTH
答案 1 :(得分:1)
我希望这会有所帮助:
a = pd.DataFrame([['a','i'],['a','i'],['i','a']], columns=["S1", "S2"])
a.apply(lambda x: x.value_counts()).transpose().plot.bar()
结果:
说明:
a.apply(lambda x:x.value_counts()) - 从数据中创建计数值的数据框,
.transpose() - 转置索引和列(如果您想要返回Status1,Status2作为条形,Active / Inactive作为x-label,则只需删除此方法,
plot.bar() - 只是绘制你的DataFrame