python - 从两个 pandas groupby 对象绘制堆叠条形图?

标签 python matplotlib plot pandas bar-chart

考虑两个输入文件b.datc.dat:

string,date,number
a string,2/5/11 9:16am,1.0
a string,3/5/11 10:44pm,2.0
a string,4/22/11 12:07pm,3.0
a string,4/22/11 12:10pm,4.0
a string,4/29/11 11:59am,1.0
a string,5/2/11 1:41pm,2.0
a string,5/2/11 2:02pm,3.0
a string,5/2/11 2:56pm,4.0
a string,5/2/11 3:00pm,5.0
a string,5/2/14 3:02pm,6.0
a string,5/2/14 3:18pm,7.0


string,date,number
a string,2/5/10 9:16am,4.0
a string,3/4/10 10:44pm,5.0
a string,4/22/10 12:07pm,3.0
a string,6/22/10 12:10pm,6.0
a string,4/29/11 11:59am,1.0
a string,5/2/11 1:41pm,9.0
a string,5/27/11 2:02pm,3.0
a string,6/2/11 2:56pm,14.0
a string,5/2/11 3:00pm,5.0
a string,5/8/14 3:02pm,16.0
a string,5/2/14 3:18pm,7.0

我可以导入这些并分组到每月总计中:

b=pd.read_csv('b.dat')
c=pd.read_csv('c.dat')
b.index=b['date']
c.index=c['date']
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p')
c['date']=pd.to_datetime(c['date'],format='%m/%d/%y %I:%M%p')
bg=pd.groupby(b,by=[b.index.year,b.index.month])
cg=pd.groupby(c,by=[c.index.year,c.index.month])

接下来我想绘制一个堆积条形图。然而,我的尝试导致了单独的图表。

bg.sum().plot(kind='bar',stacked=True)
cg.sum().plot(kind='bar',stacked=True)

有人知道如何做到这一点吗?

最佳答案

您可以通过使用 concat 创建一个新的数据框并绘制它来完成此操作,但我认为您必须重命名其中一列。

cgs = cg.sum()
cgs.columns = ['number2']
d = pd.concat([bg.sum(), cgs], axis=1)
d.plot(kind='bar', stacked=True)

关于python - 从两个 pandas groupby 对象绘制堆叠条形图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24084576/

相关文章:

python - 使用枚举返回字典

python - 绘制图像的 2D FFT

python - 如何查看 matplotlib 旁边的图例?

python - 计算 Matplotlib 文本旋转

python - Pandas 数据框尾部不工作

python - 在 matplotlib 中绘制数组的隐式曲面

python - 线图中的非重叠误差线

python - Python 中的 3D 绘图 - 向散点图添加图例

r - 如何使用 spplot 绘制额外的栅格?

python - 从 python 执行 scp 时出错