如何在Pandas数据帧中插入分组时间序列

时间:2017-01-04 23:46:30

标签: python pandas

我有pd.DataFrame类型的数据,如下所示:

type  date  sum
A     Jan-1 1
A     Jan-3 2
B     Feb-1 1
B     Feb-2 3
B     Feb-5 6

任务是为每种类型建立一个连续的时间序列(缺少的日期应该用0填充)。

预期结果是:

type  date  sum
A     Jan-1 1
A     Jan-2 0
A     Jan-3 2
B     Feb-1 1
B     Feb-2 3
B     Feb-3 0
B     Feb-4 0
B     Feb-5 6

是否可以使用pandas或其他Python工具执行此操作?

真实数据集有数百万行。

1 个答案:

答案 0 :(得分:2)

您首先必须将日期更改为日期时间并将该列放入索引以利用重新采样,然后您可以将日期转换回其原始格式

# change to datetime
df['date'] =pd.to_datetime(df.date, format="%b-%d")
df = df.set_index('date')

# resample to fill in missing dates
df1 = df.groupby('type').resample('d')['sum'].asfreq().fillna(0)
df1 = df1.reset_index()

# change back to original date format
df1['date'] = df1.date.dt.strftime('%b-%d')

输出

  type    date  sum
0    A  Jan-01  1.0
1    A  Jan-02  0.0
2    A  Jan-03  2.0
3    B  Feb-01  1.0
4    B  Feb-02  3.0
5    B  Feb-03  0.0
6    B  Feb-04  0.0
7    B  Feb-05  6.0