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

8

I have a pandas dataframe like :

    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轴上显示年份,在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个回答

16

可以轻松地使用 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()

这里输入图片描述


谢谢,这很快也很正确。我的数据从1850年到2015年。X轴有点杂乱:链接 - 有什么解决方法吗?如果我想按每20年分组,取计数值的平均值呢? - Abhinandan Dubey
@AbhinandanDubey 至于你的第二个问题,我可以想到一些解决方案,但我不想在没有数据的情况下给你答案(除非我验证过我的答案是否正确)。你能开一个新的问题吗? - cs95
很高兴再次见到你~ :-) - BENY
@Wen 你想我了吗?因为我很想你们啊! - cs95
我好想你啊,老铁...我遇到了一些问题...我很想你和Pir...T_T - BENY
显示剩余4条评论

2

只需使用 pandas

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

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接