我有一个代表一堆帖子的数据集。每个帖子可以有4个类别和6个结果中的任何一个。
我想要做的是查看4个类别中每种类型的所有6种类型的结果数量。
我用过
df = df.groupby(["Category", "Result"]).size().reset_index(name='Count')
获得具有必要计数的3列数据帧。 我想要做的是为所有类别绘制一个多条形图,这样xticks就是类别,每个类别的所有结果都有6个条形。
我怎样才能做到这一点?
答案 0 :(得分:2)
从数据框中创建pivot table可能是个好主意。使用内置绘图功能可以轻松绘制生成的表格。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
cats = np.array([l for l in "ABCD"], dtype=str)
cats = np.random.choice(cats, 100, p=[0.3, 0.1, 0.4, 0.2])
res = np.random.choice(np.arange(1,7), 100, p=[0.2, 0.1, 0.08, 0.16,0.26,0.2])
df = pd.DataFrame({"Category":cats, "Result":res})
df2 = df.groupby(["Category", "Result"]).size().reset_index(name='Count')
df3 = pd.pivot_table(df2, values='Count', columns=['Result'], index = "Category",
aggfunc=np.sum, fill_value=0)
df4 = pd.pivot_table(df2, values='Count', columns=['Category'], index = "Result",
aggfunc=np.sum, fill_value=0)
fig, ax = plt.subplots(1,2, figsize=(10,4))
df3.plot(kind="bar", ax=ax[0])
df4.plot(kind="bar", ax=ax[1])
plt.show()