通过对每行重新采样以在熊猫中的每个特定行之前和之后有一个范围来扩展数据框

时间:2019-08-12 16:55:18

标签: python pandas dataframe

假设我们有这个数据框:

date                   value    
2018-01-10 9:30:00       0      
2018-02-11 10:00:00      1   

我想将每一行扩大到该时间前后的2小时范围内,并每30分钟进行一次重新采样,并且应该为新生成的行复制该值。

这是我想要的结果:

date                   value    
2018-01-10 7:30:00      0
2018-01-10 8:00:00      0
2018-01-10 8:30:00      0 
2018-01-10 9:00:00      0
2018-01-10 9:30:00      0  
2018-01-10 10:00:00     0 
2018-01-10 10:30:00     0
2018-01-10 11:00:00     0 
2018-01-10 11:30:00     0

2018-02-11 8:00:00      1
2018-02-11 8:30:00      1
2018-02-11 9:00:00      1
2018-02-11 9:30:00      1
2018-02-11 10:00:00     1
2018-02-11 10:30:00     1
2018-02-11 11:00:00     1 
2018-02-11 11:30:00     1
2018-02-11 12:00:00     1

1 个答案:

答案 0 :(得分:2)

一个非常有趣的问题,请参见下面的代码(这是错误的

(pd.concat([df, df.rename(lambda x:x+pd.DateOffset(hours=2)),
            df.rename(lambda x:x+pd.DateOffset(hours=-2))])
   .sort_index()
   .resample('30min')
   .ffill())

新答案(假设数据是熊猫系列),

def func(s):
    df = (pd.concat([s, s.rename(lambda x:x+pd.DateOffset(hours=2)),
                        s.rename(lambda x:x+pd.DateOffset(hours=-2))])
            .sort_index()
            .resample('30min')
            .ffill())
    return df

pd.concat(func(data.iloc[[i]]) for i in range(data.shape[0]))