python,pandas - 带有时间的数据帧,创建移位数据

时间:2017-01-07 00:59:23

标签: python pandas dataframe shift

我有一个DataFrame:

   sensor_id  unix_timestamp     value  value_shift_0  value_shift_1  value_shift_2  value_shift_3  value_shift_4
0   0.901001        0.036683  0.945908            NaN            NaN            NaN            NaN            NaN
1   0.751759        0.038600  0.117308            NaN            NaN            NaN            NaN            NaN
2   0.737604        0.484417  0.602733            NaN            NaN            NaN            NaN            NaN
3   0.259865        0.522115  0.074188            NaN            NaN            NaN            NaN            NaN
4   0.932359        0.662560  0.648445            NaN            NaN            NaN            NaN            NaN
5   0.114668        0.066766  0.285553            NaN            NaN            NaN            NaN            NaN
6   0.795851        0.565259  0.888404            NaN            NaN            NaN            NaN            NaN
7   0.082534        0.355506  0.671816            NaN            NaN            NaN            NaN            NaN
8   0.336648        0.651789  0.859373            NaN            NaN            NaN            NaN            NaN
9   0.917073        0.842281  0.458542            NaN            NaN            NaN            NaN            NaN

我想再创建5个列,其中每个新列都是值列的移位版本。

gcc_options = -std=c++11 -static -pthread

src_dir = LuaHost
src_files =  $(src_dir)/*.cpp
src_files += $(src_dir)/*.h
src_files += $(src_dir)/LuaSrc/*.h
src_files += $(src_dir)/LuaSrc/*.hpp

lib_cmd = -Wl,--no-as-needed -ldl -L./$(src_dir)/LuaSrc/ -lluajit

#compile everything and output an executeable
all:
    g++ $(gcc_options) $(src_files) $(lib_cmd) -o LuaJITSandbox.o

但我不知道如何填写适当的移位值列。

1 个答案:

答案 0 :(得分:2)

pd.concat带有词典理解以及join

df.join(
    pd.concat(
        {'value_shift_{}'.format(i): df.value.shift(i) for i in range(5)},
        axis=1))

enter image description here

使用numpy

替代

def multi_shift(s, n):
    a = np.arange(len(s))
    i = (a[:, None] - a[:n]).ravel()
    e = np.empty(i.shape)
    e.fill(np.nan)
    w = np.where(i >= 0)
    e[w] = df.value.values[i[w]]

    return pd.DataFrame(e.reshape(10, -1),
                        s.index, ['shift_%i' % s for s in range(n)])

df.join(multi_shift(df.value, n))

时间

enter image description here