我的数据可以在给定日期有多个事件,也可以在某个日期没有事件。我接受这些事件,按日期计数并绘制它们。但是,当我绘制它们时,我的两个系列并不总是匹配。
idx = pd.date_range(df['simpleDate'].min(), df['simpleDate'].max()) s = df.groupby(['simpleDate']).size()
在上面的代码中, idx 变成了 30 个日期的范围。09-01-2013 到 09-30-2013 但是 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 的条目。
df.groupby(['simpleDate']).size()
09-02-2013 2 09-03-2013 10 09-06-2013 5 09-07-2013 1
你可以使用Series.reindex:
Series.reindex
import pandas as pd idx = pd.date_range('09-01-2013', '09-30-2013') s = pd.Series({'09-02-2013': 2, '09-03-2013': 10, '09-06-2013': 5, '09-07-2013': 1}) s.index = pd.DatetimeIndex(s.index) s = s.reindex(idx, fill_value=0) print(s)
产量
2013-09-01 0 2013-09-02 2 2013-09-03 10 2013-09-04 0 2013-09-05 0 2013-09-06 5 2013-09-07 1 2013-09-08 0 ...