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

按分组提取DataFrame中的字段差异

问题描述

现有如下结构的DataFrame:

IDcol1col2
AB13
AB13
CD24
CD23

需要按ID分组,比较组内每行数据:

  • 若组内某列的所有值都相同,则对应行的mismatch_extract_该列名字段填Na
  • 若组内某列存在不同值,则对应行的mismatch_extract_该列名字段填入该列所有唯一值用冒号连接的字符串(如示例中CD组的col2,值为4和3,所以填4:3)

最终输出格式如下:

IDcol1col2mismatch_extract_col1mismatch_extract_col2
AB13NaNa
AB13NaNa
CD24Na4:3
CD23Na4:3
解决方案

可以使用Pandas的分组功能结合自定义函数实现,代码如下:

import pandas as pd

# 构建示例DataFrame
df = pd.DataFrame({
    'ID': ['AB', 'AB', 'CD', 'CD'],
    'col1': [1, 1, 2, 2],
    'col2': [3, 3, 4, 3]
})

def process_group(group):
    # 遍历每个数据列,生成差异提取字段
    for col in ['col1', 'col2']:
        unique_vals = group[col].unique()
        if len(unique_vals) > 1:
            # 把唯一值转成字符串并用冒号连接
            extract_val = ':'.join(map(str, unique_vals))
        else:
            extract_val = 'Na'
        # 添加到分组中
        group[f'mismatch_extract_{col}'] = extract_val
    return group

# 按ID分组并应用处理函数
result_df = df.groupby('ID', group_keys=False).apply(process_group)

print(result_df)

代码说明:

  • groupby('ID', group_keys=False):按ID分组,避免分组键作为索引添加到结果中
  • 自定义函数process_group:对每个分组的每一列,检查唯一值数量:
    • 唯一值数量大于1时,将所有唯一值转为字符串并用冒号连接
    • 唯一值数量等于1时,赋值为Na
  • 最后将生成的差异提取列添加到原分组数据中,合并得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:05:22