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

使用Pandas基于列特定值生成新列的分组匹配需求

Pandas DataFrame 分组转换处理方案

原始数据结构

ABCCategoryValue
1APrimeUnique0
2APrimeOneInitials
1APrimeTwoSeconds
2BPrimeUnique1
2BPrimeOneFirsts

需求说明

按A、B、C三列分组,将每组内Category为Unique的记录转为新列Unique,把对应的Value值匹配到同组其他记录中,同时剔除Category为Unique的原始行,最终得到如下目标结构:

ABCCategoryValueUnique
2APrimeOneInitials
1APrimeTwoSeconds0
2BPrimeOneFirsts1

实现代码

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'A': [1, 2, 1, 2, 2],
    'B': ['A', 'A', 'A', 'B', 'B'],
    'C': ['Prime']*5,
    'Category': ['Unique', 'One', 'Two', 'Unique', 'One'],
    'Value': ['0', 'Initials', 'Seconds', '1', 'Firsts']
})

# 提取每组的Unique值映射表
unique_map = df[df['Category'] == 'Unique'].set_index(['A', 'B', 'C'])['Value'].rename('Unique')

# 过滤掉Category为Unique的行
filtered_df = df[df['Category'] != 'Unique']

# 左连接匹配同组的Unique值
result_df = filtered_df.merge(unique_map, how='left', on=['A', 'B', 'C'])

# 对齐目标列顺序
result_df = result_df[['A', 'B', 'C', 'Category', 'Value', 'Unique']]

print(result_df)

代码说明

  1. 构建映射表:筛选出Category为Unique的记录,以A、B、C为索引,提取对应的Value并命名为Unique,得到每组的Unique值对应关系。
  2. 过滤原始行:移除原始数据中Category为Unique的记录,只保留需要匹配的目标行。
  3. 匹配合并:通过左连接将映射表与过滤后的DataFrame合并,自动按分组匹配Unique值,组内无对应Unique记录时,该列自动填充为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:56:54