将多天的数据堆叠在一起

时间:2016-12-06 02:31:58

标签: python pandas dataframe time-series

注意 - 它不是Converting/splitting and transposing a groupby or datetime object into dataframe

的副本

我有一只熊猫df:

nav

我想像这样(例如)

进行转换
                                Reading
2016-06-01 09:00:00+09:00       1190.958
2016-06-01 10:30:00+09:00       1189.886
2016-06-01 12:00:00+09:00       1194.089
2016-06-01 13:30:00+09:00       1193.464
2016-06-01 15:00:00+09:00       1193.050
2016-06-02 09:00:00+09:00       1190.879
2016-06-02 12:00:00+09:00       1190.025
2016-06-02 13:30:00+09:00       1187.057
2016-06-02 15:00:00+09:00       1186.600
2016-06-03 09:00:00+09:00       1190.879
2016-06-03 10:30:00+09:00       1189.886
2016-06-03 12:00:00+09:00       1190.025
2016-06-03 13:30:00+09:00       1187.057
2016-06-03 15:00:00+09:00       1186.600

因此,对于每一天,我需要在对应于每一天的行中获得前几天的数据(此处为w = 2)。

到目前为止,我的方法是这样的: 使用建议的方法here我最初通过执行以下操作获得每天的数据:

           09:00:00+09:00  10:30:00+09:00  12:00:00+09:00  13:30:00+09:00  15:00:00+09:00  09:00:00+09:00  10:30:00+09:00  12:00:00+09:00  13:30:00+09:00  15:00:00+09:00
2016-06-01 1190.958        1189.886        1194.089        1193.464        1193.050        1190.879        NA              1190.025        1187.057        1186.600
2016-06-02 1190.879        NA              1190.025        1187.057        1186.600        1190.958        1189.886        1194.089        1193.464        1193.050

然后我使用以下方法将数据帧沿轴= 1移位:

df.index = [df.index.date, df.index.time]
df= df.unstack()

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

遵循相关问题和答案的建议......这是一个很好的问题回答: - )

df.index = [df.index.date, df.index.time]
d1 = df.Reading.unstack()
d1

enter image description here

然后使用shiftpd.concat

定义新功能
def do_n_such_and_such(df, n):
    k = len(df) - n + 1
    shifts = [df.shift(s) for s in range(0, -n, -1)]
    return pd.concat(shifts, axis=1).iloc[:k]

do_n_such_and_such(d1, 2)

enter image description here