通过滚动窗口从多行有效地在Pandas中创建宽表

时间:2018-12-29 10:16:41

标签: python pandas numpy

我有一个600列的数据帧,大约有1,000,000行。所有单元格均为float32。

我需要在数据帧中逐行移动滚动窗口(长度为30),以创建将窗口中的滚动窗口组合在一起的新行。宽度为600 * 30 == 18000,长度(行)约为1,000,000 - 30。由于滚动窗口的存在,原始数据框中的行在设计结果中被复制(通过设计)。

下面是一些粗略的( unested )代码,用于总结要求。实际上,我会分配一个正确长度的numpy数组,而不是Xy_hist = [] python列表。

# tmp is the large df already defined
total_size = tmp.shape[0]
window_size = 30
Xy_hist = []
for x in range(total_size-window_size):
    tmp_df = tmp.iloc[0+x:window_size+x,:].stack().to_frame().T
    tmp_df.columns = tmp_df.columns.get_level_values(1)
    Xy_hist.append(tmp_df)
res = pd.concat(Xy_hist)

我认为这种方法在内存方面非常低效,并且在计算上也可能效率低下。是否有更好的pythonic和/或Pandas本机方法可以解决此问题?

1 个答案:

答案 0 :(得分:0)

我不确定这是否正是您所需要的,只是我的靶心解决方案,您可以做到:

total_size = tmp.shape[0]
window_size = 30
res = pd.concat([tmp.iloc[x:window_size+x,:] for x in range(0, total_size, window_size)])