我正在处理一些存储不佳的时间序列数据。
有一列是我制作的索引,它的时间戳大多是每 15 分钟一次,但有些更短。还有start_sec
和 end_sec
列给出了行的间隔部分。
问题是数据创建者假设时间间隔都是 15 分钟长,因此所有start_sec
end_sec
值都在 0 到 900(伪秒)之间运行,而不管实际间隔长度如何。我想将这些列组合成开始时间(索引)和实际秒数的长度。
我重新调整事物的非常笨拙的解决方案是为短时间间隔生成一个时间戳列表,并将所有内容放在一个 for 循环中
for i in short_intervals:
scale = float(df[ (df.index == i) ].delta.max()) / 60. / 15.
df[ (df.index == i) ].start_sec = df[(df.index == i)].start_sec * scale
df[ (df.index == i) ].end_sec = df[(df.index == i)].end_sec * scale
其中
df.index == i
选择给定时间戳的相关行集
df.delta.max()
具有间隔的实际长度(以分钟为单位)(因为事物的存储方式)
scale
给出了我想要缩放我的伪秒以获得实际秒数的值。
所有这些都很好,我以为我已经完成了,但是
df[ (df.index == i) ].start_sec = df[(df.index == i)].start_sec * scale
实际上并没有更新 DataFrame, df 在循环之后与之前完全相同。