如何使用pandas / matplot lib绘制/管理2列分类数据?

时间:2017-02-09 22:22:38

标签: python pandas numpy matplotlib

我有一个代表一堆帖子的数据集。每个帖子可以有4个类别和6个结果中的任何一个。

我想要做的是查看4个类别中每种类型的所有6种类型的结果数量。

我用过

df = df.groupby(["Category", "Result"]).size().reset_index(name='Count')

获得具有必要计数的3列数据帧。 我想要做的是为所有类别绘制一个多条形图,这样xticks就是类别,每个类别的所有结果都有6个条形。

我怎样才能做到这一点?

1 个答案:

答案 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()

enter image description here