如何定位列表中同名DataFrame并合并其A、B列后整合?
解决方案
首先修正你原循环的核心问题——你当前代码在每次循环里都会重新初始化file_name、location、match三个列表,导致之前循环的结果被覆盖。先正确提取所有文件对应的match标识:
import os import re import pandas as pd # 初始化空列表,循环填充所有文件的对应标识 file_name = [] location = [] match = [] for path in split_list: fn = os.path.split(path)[1] file_name.append(fn) # 去除文件名中的日期部分 loc = re.sub(r'(\d+-\d+-\d+)', '', fn) # 去除后缀文本 loc = loc.rstrip(' Daily Report.xlsx') location.append(loc) # 提取匹配标识(假设每个文件对应唯一标识,取列表第一个元素) m = re.findall(r'\d+\.\d+', loc) match.append(m[0] if m else '')
接下来通过分组处理重复标识对应的DataFrame,实现A、B列的累加合并:
# 用字典按match标识分组存储DataFrame grouped_dfs = {} for m, df in zip(match, dfs): if m not in grouped_dfs: grouped_dfs[m] = [] grouped_dfs[m].append(df) # 处理每个分组,生成最终结果 final_dfs = [] for m, df_list in grouped_dfs.items(): if len(df_list) == 1: # 无重复,直接保留原DataFrame final_dfs.append(df_list[0]) else: # 有重复,初始化合并结果为第一个DataFrame的副本 merged_df = df_list[0].copy() # 遍历剩余DataFrame,累加A、B列 for df in df_list[1:]: merged_df['A'] += df['A'] merged_df['B'] += df['B'] # C列默认保留第一个DataFrame的内容,若需其他逻辑可自行调整 final_dfs.append(merged_df) # 可选:将所有结果合并为一个大DataFrame final_combined_df = pd.concat(final_dfs, ignore_index=True)
关键修正说明
- 移除了循环内重复初始化列表的错误逻辑,确保所有
match标识被完整存储 - 使用字典分组管理相同标识的DataFrame,逻辑更清晰且支持多个重复项(不止两个)的场景
- 保留无重复的原始DataFrame,确保所有数据都被正确处理
- 累加操作基于副本修改,避免污染原始DataFrame数据
内容的提问来源于stack exchange,提问作者verynovice
相关产品推荐
相关产品推荐

