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

Pandas分组后按分隔符拼接唯一值:列缺失问题求助

解决Pandas分组聚合后缺失列及警告问题

问题分析

你的代码存在两个核心问题:

  1. 聚合后丢失city和country列,同时触发FutureWarning——原因是未明确指定要聚合的列,Pandas自动判定部分列为"无效"并丢弃,实际上这些列完全可以被聚合。
  2. 现有聚合逻辑未对列值去重,若存在重复值会重复拼接,不符合"取唯一值后拼接"的需求。

解决方案

明确指定分组键和要聚合的列,对每个目标列先提取唯一值,再用|拼接:

import pandas as pd

# 构造示例数据(已有DataFrame可跳过此步)
data = {
    'org_id': [100023310, 100023310, 100023310, 100004261, 100004261],
    'org_name': ['advance GmbH', 'advance GmbH', 'advance GmbH', 'Beacon Limited', 'Beacon Limited'],
    'location_id': ['LOC-100052061', 'LOC-100032442', 'LOC-100042003', 'LOC-100005615', 'LOC-100000912'],
    'loc_status': ['ACTIVE', 'ACTIVE', 'INACTIVE', 'ACTIVE', 'ACTIVE'],
    'city': ['Planegg', 'Planegg', 'Planegg', 'Tunbridge Wells', 'Crowborough'],
    'country': ['Germany', 'Germany', 'Germany', 'United Kingdom', 'United Kingdom']
}
df = pd.DataFrame(data)

# 定义分组键和要聚合的列
group_keys = ['org_id', 'org_name']
agg_columns = [col for col in df.columns if col not in group_keys]

# 分组聚合:去重后拼接
result = df.groupby(group_keys, as_index=False).agg(
    {col: lambda x: '|'.join(x.unique()) for col in agg_columns}
)

print(result)

输出结果

org_id       org_name                                      location_id         loc_status                          city         country
0  100004261  Beacon Limited                                LOC-100005615|LOC-100000912             ACTIVE  Tunbridge Wells|Crowborough  United Kingdom
1  100023310    advance GmbH  LOC-100052061|LOC-100032442|LOC-100042003  ACTIVE|INACTIVE                      Planegg        Germany

关键说明

  • as_index=False:确保分组键作为普通列保留在结果中,而非转为索引。
  • 聚合字典:明确指定每个目标列的聚合逻辑,避免Pandas自动处理时的列丢弃问题,同时消除警告。
  • x.unique():先提取列内唯一值再拼接,满足需求的同时避免重复内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:28:12