我的数据可以在给定日期包含多个事件,也可以在一个日期包含否事件。我接受这些事件,按日期计数并绘制它们。但是,当我绘制它们时,我的两个系列并不总是匹配。
idx = pd.date_range(df['simpleDate'].min(), df['simpleDate'].max()) s = df.groupby(['simpleDate']).size()
在上面的代码中,idx变为30个日期范围。2019/09/01至2019/09/30但是S可能只有25或26天,因为在给定日期没有事件发生。然后,当我尝试绘图时,由于大小不匹配,我得到一个AssertionError:
fig, ax = plt.subplots() ax.bar(idx.to_pydatetime(), s, color='green')
解决这个问题的正确方法是什么?我是否要从IDX中删除没有值的日期,还是(我希望这样做)将序列中缺少的日期添加为0(我希望这样做)?我希望有30天的完整图表(值为0)。如果这种方法正确,那么有关如何开始的任何建议?我需要某种动态reindex功能吗?
reindex
这是S(df.groupby(['simpleDate']).size() )的代码段,请注意没有输入04和05。
S(df.groupby(['simpleDate']).size() )
09-02-2019 2 09-03-2019 10 09-06-2019 5 09-07-2019 1
你可以使用Series.reindex:
Series.reindex
import pandas as pd idx = pd.date_range('09-01-2019', '09-30-2019') s = pd.Series({'09-02-2019': 2, '09-03-2019': 10, '09-06-2019': 5, '09-07-2019': 1}) s.index = pd.DatetimeIndex(s.index) s = s.reindex(idx, fill_value=0) print(s)
输出
2019-09-01 0 2019-09-02 2 2019-09-03 10 2019-09-04 0 2019-09-05 0 2019-09-06 5 2019-09-07 1 2019-09-08 0 ...