滑动窗口生成数据集列表后构建MultiIndex多级索引DataFrame问题
问题原因
- 最初的实现将每个滑动窗口生成的子DataFrame存入列表,直接调用
pd.DataFrame(Window)时,pandas会将每个子DataFrame视为单个元素存入单列,输出中每行的内容实际是子DataFrame的字符串表示,不是结构化数据。 - 第二次修改的代码尝试直接将二维子DataFrame赋值给DataFrame的单列,而DataFrame的单列仅支持存储一维的Series/数组结构,因此抛出
ValueError :Cannot set a frame with no defined index and a value that cannot be converted to a Series报错。
解决方法
直接调用pandas.concat方法拼接你已经生成的子DataFrame列表,通过keys参数自动生成多级索引:
# 直接使用你第一版代码生成的Window列表即可,无需修改原有循环逻辑 import pandas as pd # keys为每个窗口分配一级索引,names自定义两级索引的名称,可按需修改 multi_index_df = pd.concat(Window, keys=range(len(Window)), names=["窗口序号", "窗口内行索引"])
如果需要给循环中生成的两类窗口(l和j)做区分,可以调整生成逻辑,得到更清晰的多级索引:
Window = [] window_keys = [] k=12 m=6 for idx, i in enumerate(list2): l=df3S.iloc[i:i+k,:] j=df3S.iloc[i+m:i+(3*m),:] Window.append(l) window_keys.append((idx, "前向窗口")) Window.append(j) window_keys.append((idx, "后向窗口")) multi_index_df = pd.concat(Window, keys=window_keys, names=["组序号", "窗口类型", "窗口内行索引"])
生成的multi_index_df就是符合要求的多级索引DataFrame,可直接用于后续分析。
内容的提问来源于stack exchange,提问作者Hoda Nayebi
相关产品推荐
相关产品推荐

