1

我正在处理一些存储不佳的时间序列数据。

有一列是我制作的索引,它的时间戳大多是每 15 分钟一次,但有些更短。还有start_secend_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 在循环之后与之前完全相同。

4

1 回答 1

0

而不是使用你的df.index语法,试试这个:

df.start_sec[i] = df.start_sec[i] * scale
df.end_sec[i] = df.end_sec[i] * scale

甚至:

df.start_sec[i] *= scale
df.end_sec[i] *= scale

在我的测试中,框架没有使用以下语法分配任何值:

df[(df.index==i)].start_sec = 25

其他人可能会解释原因,但这可能与此有关:

>>> type(df.A[i])
<type 'numpy.int64'>
>>> type(df[(df.index==i)].A)
<class 'pandas.core.series.Series'>
于 2013-11-14T01:46:27.150 回答