我有一个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本机方法可以解决此问题?
答案 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)])