python - 将两个数据框绘制成一个条形图,区分它们的值
问题描述
我对以下任务感到困惑,我希望有人能指出我正确的方向。我有两个数据集,一个包含 2019 年 1 月的数据,另一个包含 2020 年 1 月的数据。
df1
ID Date
5177 2019-01-31
5178 2019-01-31
5179 2019-01-31
5180 2019-01-31
5181 2019-01-31
5182 2019-01-31
5183 2019-01-31
5184 2019-01-30
5185 2019-01-30
5186 2019-01-30
df2
ID Date
2918 2020-01-31
2919 2020-01-31
2920 2020-01-31
2921 2020-01-31
2922 2020-01-31
2923 2020-01-31
2924 2020-01-31
2925 2020-01-31
2926 2020-01-30
2927 2020-01-30
我试图将它们绘制为折线图,如下所示:
df1.groupby('Date').size().plot()
df2.groupby('Date').size().plot()
plt.xticks(rotation=90)
plt.show()
但输出并不好,因为结果显示在图表的两个不同区域(一个是 2019 年,另一个是 2020 年)。所以我一直在尝试做的是将这些数据绘制为条形图,将条形彼此靠近,以便轻松比较数据的频率。
我试过如下:
df1.groupby(['Date'])['Date'].size().plot(kind='bar')
df2.groupby(['Date'])['Date'].size().plot(kind='bar')
但这不区分来自 df1 的值和来自 df2 的值(此外,条形图的颜色相同)。
我想要的是一张在 x 轴上显示日期的图表(只有几天,因为月份是相同的,我知道我在比较哪一年)。使用不同的颜色,我需要绘制来自 1 的数据和来自 2 的数据(图例会告诉 df1/2 是哪个)。
你能告诉我如何绘制数据以获得预期的输出吗?
谢谢
解决方案
您可以先加入一个数据框,但首先将日期的格式更改为'%m-%d'
with strftime
,您也可以rename
将列的输出size
更改为年份。
df1['Date'] = pd.to_datetime(df1['Date']).dt.strftime('%m-%d')
df2['Date'] = pd.to_datetime(df2['Date']).dt.strftime('%m-%d')
(df1.groupby('Date').size().rename('Size').to_frame().join(
df2.groupby('Date').size().rename('Size').to_frame(),
lsuffix='_2019', rsuffix='_2020').plot(kind='bar'))
推荐阅读
- python - Python:枚举与类
- pyspark - 如何在pyspark中编写嵌套if else?
- python - python qpageview - 如何绘制一个矩形
- shell - “通配符”对象没有属性“输出”
- javascript - 监听API调用成功
- java - 如何在 Java 中打印默认值而不在 Oracle 函数中添加默认参数化值?
- docker - 将数据从 docker-compose 自动创建的卷复制到新的外部卷
- ionic-framework - 图像不能在寻呼机点上滑动单击离子 5
- angularjs - 设置 top.location=self.location 时基于 DOM 的 xss 问题
- oracle - 将解码的字符串插入4个不同的列