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

合并同ID对应Pandas DataFrame的A、B列并去重ID的方法

解决方案

核心思路

不能直接用next(b)跳过同ID的其他DataFrame,需要遍历每个ID分组内的所有DataFrame,对A、B列做求和操作,C列取任意一个(因同ID的C列值一致)。注意:itertools.groupby仅对连续相同的键分组,若原ID列表未排序,需先按ID排序。


代码实现

步骤1:确保分组前ID有序(可选但必要)

如果原id列表不是按ID值排序的,先对df_groups按ID排序:

# 按ID排序,保证同ID的元素连续
df_groups_sorted = sorted(df_groups, key=lambda x: x[0])

步骤2:分组处理求和

from itertools import groupby
import pandas as pd

result = []
for id_val, group in groupby(df_groups_sorted, key=lambda x: x[0]):
    # 提取当前ID下的所有DataFrame
    dfs_in_group = [df for _, df in group]
    
    # 方式1:高效逐列求和(适用于所有df结构完全一致的场景)
    summed_df = pd.DataFrame({
        "A": sum(df["A"] for df in dfs_in_group),
        "B": sum(df["B"] for df in dfs_in_group),
        "C": dfs_in_group[0]["C"]  # 取第一个df的C列,因同ID值一致
    }, index=dfs_in_group[0].index)
    
    # 方式2:合并后聚合(适用于df行顺序可能不一致的场景)
    # combined = pd.concat(dfs_in_group)
    # summed_df = combined.groupby(combined.index).agg(
    #     A="sum",
    #     B="sum",
    #     C="first"
    # )
    
    # 将结果加入列表
    result.append((id_val, summed_df))

说明

  • 方式1效率更高,前提是同ID下的所有DataFrame行数、索引、列顺序完全一致;
  • 方式2更灵活,即使同ID的df行顺序不同,也能通过索引对齐求和;
  • 最终result就是去重后的列表,每个元素为(唯一ID, 合并求和后的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 04:32:30