Pandas 在时间序列间隙的熊猫系列中插入0
为了正确地绘制数据,我需要将缺少的值显示为0。我不希望每缺少一天都有一个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。奖金:如果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])