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

如何让合并生成的merged_data包含原DataFrame df的所有列?

解决merged_data缺失原df列的问题

你的代码只保留了从文件读取的Case相关列和folder_file_id,完全没关联原df的其他列(比如除File ID、File Name外的字段)。下面提供两种实用方案:

方案一:合并后关联原df(最简修改)

基于你现有代码,只需要加两步就能把原df的所有列带进来:

  1. 先给原df生成和代码中一致的folder_file_id列:
df['folder_file_id'] = df['File ID'].str.strip() + '_' + df['File Name'].str.strip()
  1. 执行你原来的代码生成merged_data后,用folder_file_id做关联键,把原df的列合并进去:
merged_data = merged_data.merge(df, on='folder_file_id', how='left')

这样最终的merged_data就会包含原df的全部列,加上从文件读取的各个Case列。

方案二:循环时直接携带原df列(更高效)

如果原df数据量较大,循环时直接把原df行信息和文件数据结合,避免后续的merge操作:

import pathlib
import pandas as pd

root_path = pathlib.Path('root')

data_list = []
for count, (idx, row) in enumerate(df.iterrows(), 1):
    folder_name = row['File ID'].strip()
    file_name = row['File Name'].strip()
    file_path = root_path / folder_name / file_name
    folder_file_id = f'{folder_name}_{file_name}'

    # 读取文件数据
    file_data = pd.read_csv(file_path, header=None, sep='\t',
                            names=['Case', 'Value'],
                            memory_map=True, low_memory=False)
    
    # 把原df当前行的所有列复制到file_data的每一行
    file_data = file_data.assign(**row.to_dict(), folder_file_id=folder_file_id)
    
    data_list.append(file_data)
    print(count)

# 合并数据并转成宽表,直接得到包含原df所有列的结果
merged_data = pd.concat(data_list).pivot_table(
    index=[col for col in df.columns] + ['folder_file_id'],
    columns='Case',
    values='Value',
    aggfunc='first'  # 若同一Case有重复值,取第一个,可按需调整
).reset_index()

注意事项

  • 如果原df存在重复的folder_file_id,需根据实际需求调整pivot_table的aggfunc参数(比如用mean取均值),或者提前对原df去重。
  • 方案二中的file_data.assign(**row.to_dict())可以快速把原df的所有列复制到文件数据中,比逐个列赋值更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:46:24