从pandas数据框中的唯一行值创建新列

时间:2017-09-23 01:30:23

标签: python pandas matplotlib dataframe plot

我有一个pandas数据框,如:

    yearPassed  policyType  count
0       1990        1        2000
1       1990        2        1400
2       1990        3        1200
3       1991        3        70
4       1992        2        1000
5       1992        3        800

我想制作一个条形图,按policyType列进行颜色编码,并在X轴上显示Year,并在Y轴上计数。

我试过这样做:

policy_vs_year.plot(x="yearPassed", y=["count", "policyType"], kind="bar")
plt.show()

但这会产生非常糟糕的情节。

所以我决定将我的数据帧转换成这样的东西(可能更容易用这种方式绘制):

    yearPassed       1       2       3
0       1990       2000    1400     1200
1       1991        0        0       70
2       1992        0      1000     800

我的问题是pandas中的基本功能是否可以实现这一目标? (或者有更简单的替代方法以原始格式绘制数据帧 - 无需重新格式化?)

2 个答案:

答案 0 :(得分:6)

使用df.pivot_table

可轻松完成此操作
df = df.pivot_table(index=['yearPassed'], 
            columns=['policyType'], values='count').fillna(0)
df

policyType       1       2       3
yearPassed                        
1990        2000.0  1400.0  1200.0
1991           0.0     0.0    70.0
1992           0.0  1000.0   800.0

此外,可以使用df.plot

制作堆积条形图
import matplotlib.pyplot as plt
df.plot(kind='bar', stacked=True)
plt.show()

enter image description here

答案 1 :(得分:2)

只需使用pandas

df.set_index(['yearPassed','policyType']).unstack(-1).fillna(0).plot.bar(stacked=True)

enter image description here