You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DataFrame列表提取r列并按文件名构建新DataFrame?

解决多DataFrame指定列合并问题

问题场景

你有一个包含8个DataFrame的列表all_df,每个DataFrame包含CloneID、r等字段;同时有一个文件名元组all_files,对应每个DataFrame的来源文件。需要将每个DataFrame的r列提取出来,以CloneID为索引,列名对应该DataFrame的文件名,合并到新的DataFramedf_relative中。

你原本使用以下代码时,仅能添加最后一个DataFrame的r列:

r_column= df_relatieve_expression[["r"]]
df_relatieve_expression[file]= r_column

错误原因

你的代码没有正确初始化目标DataFrame,且未将每个DataFrame的CloneID设为索引来保证合并时的匹配,循环操作中也没有实现逐步合并,最终仅保留了最后一次循环的结果。

解决方案

方法一:循环逐步合并

通过遍历配对的DataFrame和文件名,逐个处理并合并到目标DataFrame:

import pandas as pd

# 初始化目标DataFrame
df_relative = None

# 同时遍历DataFrame列表与文件名元组
for df, file_name in zip(all_df, all_files):
    # 提取CloneID和r列,设置CloneID为索引,并重命名r列为对应文件名
    temp_df = df[["CloneID", "r"]].set_index("CloneID").rename(columns={"r": file_name})
    if df_relative is None:
        # 第一个DataFrame直接赋值
        df_relative = temp_df
    else:
        # 按索引合并,可根据需求选择how参数(inner/outer)
        df_relative = df_relative.join(temp_df, how="outer")

方法二:用pd.concat高效合并

更简洁的方式是先生成所有处理后的子DataFrame,再一次性合并:

import pandas as pd

# 生成处理后的子DataFrame列表
processed_dfs = []
for df, file_name in zip(all_df, all_files):
    temp_df = df[["CloneID", "r"]].set_index("CloneID").rename(columns={"r": file_name})
    processed_dfs.append(temp_df)

# 按列合并所有子DataFrame
df_relative = pd.concat(processed_dfs, axis=1)

两种方法都能保证每个r列以对应文件名作为列名,且以CloneID为索引完成匹配合并。

内容的提问来源于stack exchange,提问作者Janssens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:27:32