一个新问题,但这里...
我有一个时间序列值的数据框,如下所示。
Index Value A Value B
2019-02-05 18:00:00 1.16 6.32
2019-02-05 17:00:00 1.1475 23.7825
2019-02-05 18:00:00 1.16 6.32
2019-02-05 17:00:00 1.1475 23.7825
2019-02-05 16:00:00 0.4125 23.7825
2019-02-05 15:00:00 0.0 31.71
2019-02-05 14:00:00 0.0 23.7825
2019-02-05 13:00:00 1.015 23.7825
2019-02-05 12:00:00 0.24 23.7825
对于数据帧中的每一行,我想标识最后的24个先前值,并根据原始索引将它们写入新的数据帧中。结果看起来像这样。
Index Time diff Value A Value B
2019-02-05 18:00:00 0 1.16 6.32
2019-02-05 18:00:00 -1 1.147 23.7825
2019-02-05 18:00:00 -2 1.16 6.32
2019-02-05 18:00:00 -3 1.147 23.7825
2019-02-05 18:00:00 etc... etc.... etc....
2019-02-05 18:00:00 -23 1.147 23.7825
因此,总的来说,对于原始数据帧中的每一行,我最终都会在新数据帧中包含24行,并在新列中指示时滞。
执行此操作的原因是为机器学习准备数据,其中索引是我们的目标,而24个关联的历史值是预测变量。
目前,我正在尝试使用类似...
for i, row in be_hour.iterrows():
if <something>:
df.at[i, 'ifor'] = x
else:
df.at[i, 'ifor'] = y
但是由于缺乏经验,我很难真正实现这一目标。
答案 0 :(得分:1)
这是我想出的解决方案:
import pandas as pd
idx = ['2019-02-05 18:00:00',
'2019-02-05 17:00:00',
'2019-02-05 16:00:00',
'2019-02-05 15:00:00',
'2019-02-05 14:00:00',
'2019-02-05 13:00:00',
'2019-02-05 12:00:00']
A = [1.16, 1.1475, 1.1475, 0.4125, 0.0, 1.015, 0.24]
B = [6.32, 23.7825, 23.7825, 23.7825, 23.7825, 23.7825, 23.7825]
idx = [pd.Timestamp(t) for t in idx]
idx = pd.Index(idx)
d = {'A': A, 'B': B}
df = pd.DataFrame(data = d)
df = df.set_index(idx)
df1 = pd.DataFrame()
for i in df.index:
top = i
bot = top - pd.Timedelta('3 hour')
result = df.loc[top:bot]
for j in result.index:
diff = top - j
row = {'timestamp': top, 'diff': diff, 'A': df.A[j], 'B': df.B[j]}
df1 = df1.append(row, ignore_index=True)
df1 = df1.set_index('timestamp')