python - 通过重复最后一行来增加数据帧中每 1 秒的采样频率
问题描述
我有一个可变采样频率<30 hz的数据帧。我想通过每秒重复最后一行数据帧来将采样频率增加到 30。我的数据框中的时间戳列没有毫秒。对于那一秒的所有行重复相同的时间戳。此外,数据不连续,其中一些秒数丢失。我的数据框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)
我怎样才能让它工作?
解决方案
只需使用groupby而不是resample,它就会按您的预期工作:
df.groupby('Timestamp').apply(samfreq).reset_index(drop = True)
推荐阅读
- powershell - Test-Path incorrect file validation
- php - 如何根据解码数组替换字符串中某个字符后的两个字符?
- c - 使用 C11 原子操作的可移植字对齐
- python - scoring problem with Two player dice game
- javascript - Building To-do list website that works with append, having trouble deleting notes in javascript
- x11 - What is a SaveSet in XWindows
- python - Path configuration for sqlite3 in python3.6
- windows - 在 Windows 主机文件上映射 Docker 实例(Docker 位于 Vagrant VM 中)
- python - Error give role when a user add reaction Discord.py
- sql - Stored procedure is not returning expected custom exception message