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

如何定位列表中同名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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:25:16