首页 > 解决方案 > 熊猫图上的重复 x 值

问题描述

我有以下数据集:

my_df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8],
                      'date':['2019-01-01 07:59:54','2019-01-01 08:00:07','2019-01-01 08:00:07',
                              '2019-01-02 08:00:14','2019-01-02 08:00:16','2019-01-02 08:00:24',
                              '2019-01-03 08:02:38','2019-01-03 08:50:14'],
                      'machine':['A','A','B','C','B','C','D','D']})
my_df['date'] = pd.to_datetime(my_df['date'],infer_datetime_format=True)
my_df

我想绘制每天每台机器的唯一值,所以我尝试了这段代码:

fig, ax = plt.subplots(figsize=(12,6))
# data.plot(ax=ax)
my_df.groupby(my_df['date'].dt.date)['machine'].nunique().plot(ax=ax)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d %m'))
plt.show()

但是由于某种原因,每天重复的次数与机器的数量一样多。我预计 x 轴将从 2019-01-01、2019-01-02 和 2019-01-03 开始​​,即 x 轴上只有 3 个值。对此问题的任何帮助将不胜感激。

在此处输入图像描述

标签: pythonpandas

解决方案


问题是在groupby. my_df['date'].dt.date不再是日期时间。您必须pd.Grouper(key='date', freq='D')改用:

fig, ax = plt.subplots(figsize=(12,6))
my_df.groupby(pd.Grouper(key='date', freq='D'))['machine'].nunique().plot(ax=ax)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d %m'))
plt.show()

在此处输入图像描述


推荐阅读