如何将列中路径生成的DataFrame展开并合并至原Pandas DataFrame?
问题解决方法
需求回顾
你有一个主DataFrame,其中path_col列存储文件路径,每个路径可通过open_and_convert_to_df函数转换为包含var4、var5、obs的子DataFrame。需要将这些子DataFrame展开,最终得到以var1-var3(主DF列)和var4-var5(子DF列)为索引、obs为值的结构。
已完成步骤
你已经通过df['path_col'] = df['path_col'].map(open_and_convert_to_df)将路径转换为嵌套的DataFrame列,接下来需要展开这些嵌套数据。
解决方案
以下提供两种可行方法:
方法一:直接处理原DF(无需提前生成嵌套列)
这种方法跳过生成嵌套列的步骤,直接遍历主DF的每一行,将子DataFrame与主行的var1-var3合并后拼接:
import pandas as pd # 初始化结果列表 result_list = [] # 遍历主DF的每一行 for _, main_row in df.iterrows(): # 读取并转换子数据文件为DataFrame sub_df = open_and_convert_to_df(main_row['path_col']) # 将主行的var1、var2、var3添加到子DF的所有行中 sub_df['var1'] = main_row['var1'] sub_df['var2'] = main_row['var2'] sub_df['var3'] = main_row['var3'] # 添加到结果列表 result_list.append(sub_df) # 拼接所有子DF得到最终结果 final_df = pd.concat(result_list, ignore_index=True) # 设置目标索引(var1至var5) final_df = final_df.set_index(['var1', 'var2', 'var3', 'var4', 'var5'])
方法二:基于已生成的嵌套列展开
如果你已经执行了map操作生成了嵌套的DataFrame列,可以用以下方式展开:
import pandas as pd # 定义函数:将主行数据与对应的子DF合并 def merge_main_sub(row): sub_df = row['path_col'] # 将主行的var1-var3复制到子DF的每一行 sub_df = sub_df.assign( var1=row['var1'], var2=row['var2'], var3=row['var3'] ) return sub_df # 对每一行应用函数,拼接所有结果 final_df = pd.concat(df.apply(merge_main_sub, axis=1).tolist(), ignore_index=True) # 设置目标索引 final_df = final_df.set_index(['var1', 'var2', 'var3', 'var4', 'var5'])
最终效果
处理后的final_df会以var1、var2、var3、var4、var5为多层索引,obs作为唯一的数值列,完全符合你的需求。
内容的提问来源于stack exchange,提问作者MaximGi
相关产品推荐
相关产品推荐

