通过重复最后一行来提高数据帧中每1秒的采样频率

时间:2018-11-29 03:09:19

标签: python pandas

我有一个可变采样频率<30 hz的数据帧。我想通过每秒重复数据帧的最后一行来将采样频率增加到30。 我的数据框中的timestamp列没有毫秒。对于该秒,所有行都重复相同的时间戳。另外,数据之间的间隔不连续,因此几秒钟之间会丢失。 我的数据框df具有列['Timestamp','vm','angle']

这是我尝试过的

def samfreq(args):
    size = len(args)
    inc= 30-size
    args=args.append( args.iloc[[-1]*inc] )
    args = args.reset_index(drop=True)
    return args


df= df.resample('1S',on='Timestamp').apply(samfreq)

运行上面的代码会给我这个错误

IndexError: positional indexers are out-of-bounds

如果数据是连续的,我不认为我会收到上述错误。如何忽略数据之间丢失的秒数而增加数据中所有秒数的采样频率。

这里是一个示例代码,用于生成与我正在唤醒的代码相似的数据。我故意在数据中错过了一秒钟来模仿我的数据。

d = {'Timestamp': pd.date_range(start='2016-04-15 10:36:47', end='2016-04-15 10:36:47', periods=12), 'vm': np.random.randn(12),'angle':np.random.randn(12)}
df = pd.DataFrame(data=d)
d = {'Timestamp': pd.date_range(start='2016-04-15 10:36:49', end='2016-04-15 10:36:49', periods=15), 'vm': np.random.randn(15),'angle':np.random.randn(15)}
df1 = pd.DataFrame(data=d)
df = df.append(df1,ignore_index=True)

我如何使它工作?

1 个答案:

答案 0 :(得分:0)

只需使用 groupby 而不是 resample ,它就会按您期望的那样工作:

df.groupby('Timestamp').apply(samfreq).reset_index(drop = True)