如何在pandas DataFrame中按base_path关联高效新增备注列
实现方案
核心思路是按base_path分组后,拼接每组内去重的region字段值,再映射回原DataFrame,两种常用实现方式如下:
方法1:groupby + transform(代码最简洁)
适合中小数据量,一行代码即可完成:
import pandas as pd # 构造示例DataFrame data = { 'region': ['us', 'emea', 'asia', 'emea', 'us', 'us', 'asia', 'asia'], 'base_path': ['/image', '/video', '/docs', '/image', '/video', '/docs', '/location', '/image'], 'count': [3,2,2,3,2,2,1,3] } df = pd.DataFrame(data) # 核心逻辑 df['comment'] = df.groupby('base_path')['region'].transform(lambda x: '-'.join(x.unique()))
方法2:分组构造映射字典 + map(性能更优)
适合百万级以上的大数据量,比transform方式开销更低:
# 构造base_path到拼接后comment的映射字典 path_comment_map = df.groupby('base_path')['region'].unique().str.join('-').to_dict() # 映射到原表新增字段 df['comment'] = df['base_path'].map(path_comment_map)
可选调整
如果需要region按固定顺序拼接(比如字母序),只需在拼接前对去重后的列表做排序即可:
# 按字母序排序后拼接 df['comment'] = df.groupby('base_path')['region'].transform(lambda x: '-'.join(sorted(x.unique())))
内容的提问来源于stack exchange,提问作者Dcook
相关产品推荐
相关产品推荐

