Pandas 在时间序列间隙的熊猫系列中插入0

Pandas 在时间序列间隙的熊猫系列中插入0,pandas,Pandas,为了正确地绘制数据,我需要将缺少的值显示为0。我不希望每缺少一天都有一个0值,因为这会使存储空间膨胀。如何为每个间隙的第一天和最后一天的类型列插入0值?我不需要在整个序列前后插入0。奖金:如果timeseries是每月或每周数据(日期设置为每月的第一天或每个星期一),该怎么办 例如,对于类型A,此时间序列在1月3日和10日之间包含一个间隔。我需要在1月4日和9日插入一个0值 df = DataFrame({"date":[datetime(2015,1,1) + timedelta(days=x

为了正确地绘制数据,我需要将缺少的值显示为0。我不希望每缺少一天都有一个0值,因为这会使存储空间膨胀。如何为每个间隙的第一天和最后一天的
类型
列插入0值?我不需要在整个序列前后插入0。奖金:如果timeseries是每月或每周数据(日期设置为每月的第一天或每个星期一),该怎么办

例如,对于类型
A
,此时间序列在1月3日和10日之间包含一个间隔。我需要在1月4日和9日插入一个0值

df = DataFrame({"date":[datetime(2015,1,1) + timedelta(days=x) for x in range(0, 3)+range(8, 13)+range(2, 9)], "type": ['A']*8+['B']*7, "value": np.random.randint(10, 100, size=15)})

         date type  value
0  2015-01-01    A     97
1  2015-01-02    A     11
2  2015-01-03    A     89  <-- last date before the gap
3  2015-01-09    A     31  <-- first day after the gap
4  2015-01-10    A     64
5  2015-01-11    A     82
6  2015-01-12    A     75
7  2015-01-13    A     24
8  2015-01-03    B     72
9  2015-01-04    B     46
10 2015-01-05    B     26
11 2015-01-06    B     91
12 2015-01-07    B     36
13 2015-01-08    B     53
14 2015-01-09    B     85
df=DataFrame({“date”:[datetime(2015,1,1)+timedelta(days=x)表示范围(0,3)+范围(8,13)+范围(2,9)],“type”:['A']*8+['B']*7,“value”:np.random.randint(10100,size=15)})
日期类型值
0 2015-01-01 A 97
1 2015-01-02 A 11

2 2015-01-03 A 89可能是一个不雅观的解决方案,但似乎最容易将数据框拆分,填写缺失的日期,然后重新组合,如下所示:

# with pandas imported as pd

dfA = df[df.type=='A']
new_axis = pd.date_range(df.date.min(), df.date.max())

dfA.set_index('date', inplace=True)
missing_dates = list(set(new_axis).difference(dfA.index))
dfA.loc[min(missing_dates)] = 'A', 0
dfA.loc[max(missing_dates)] = 'A', 0

df = pd.concat([df[df.type=='B'].set_index('date'), dfA])

谢谢你的回答,但是你为每一天都创建了0,而我必须为间隙的第一天和最后一天创建0。否则我的存储将爆炸)
# with pandas imported as pd

dfA = df[df.type=='A']
new_axis = pd.date_range(df.date.min(), df.date.max())

dfA.set_index('date', inplace=True)
missing_dates = list(set(new_axis).difference(dfA.index))
dfA.loc[min(missing_dates)] = 'A', 0
dfA.loc[max(missing_dates)] = 'A', 0

df = pd.concat([df[df.type=='B'].set_index('date'), dfA])