遍历数据框

时间:2019-02-06 12:19:44

标签: pandas

一个新问题,但这里...

我有一个时间序列值的数据框,如下所示。

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

但是由于缺乏经验,我很难真正实现这一目标。

1 个答案:

答案 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')