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

Python Pandas不缩减原行数按条件聚合生成唯一值新列

实现方案

核心用Pandas的groupby.transform()方法实现,该方法会将分组聚合结果映射回原始行,不会缩减DataFrame行数。

完整代码

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Col1': ['SF', 'BF', 'QW', 'SF', 'QW', 'SF'],
    'Col2': [123, 543, 241, 123, 789, 678],
    'Col3': ['01/02', '30/12', '30/12', '01/02', '20/11', '31/12'],
    'Col4': ['UP', 'DO', 'AF', 'WA', 'D', 'OT']
})

# 初始化目标列
df['目标列'] = ''

# 处理Col1为SF的行:按Col2+Col3分组聚合Col4
sf_filter = df['Col1'] == 'SF'
df.loc[sf_filter, '目标列'] = df[sf_filter].groupby(['Col2', 'Col3'])['Col4'].transform(lambda x: ', '.join(x))

# 处理Col1非SF的行:按Col3分组聚合Col4
non_sf_filter = df['Col1'] != 'SF'
df.loc[non_sf_filter, '目标列'] = df[non_sf_filter].groupby('Col3')['Col4'].transform(lambda x: ', '.join(x))

print(df)

输出结果

Col1Col2Col3Col4目标列
SF12301/02UPUP, WA
BF54330/12DODO, AF
QW24130/12AFDO, AF
SF12301/02WAUP, WA
QW78920/11DD
SF67831/12OTOT

逻辑说明

  • transform 方法会保留原DataFrame的索引,分组聚合后的结果会自动匹配到组内的所有原始行,无需额外做表关联操作
  • 拆分两类行分别处理,完全匹配指定的分组规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:15:02