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

Pandas DataFrame分组聚合后col4缺失的问题求助

Pandas分组聚合丢失列的解决方法

问题场景

按指定列分组后,将其他列的唯一值用' | '分隔聚合,但结果中丢失了col4列。

示例数据

原始DataFrame:

col1                                                col2            col3                col4
THREE M SYNDROME 1  {3-M syndrome 1, 273750 (3)}    3-m syndrome 1  {3-M syndrome 1}    273750
THREE M SYNDROME 1  {3-M syndrome 1, 273750 (3)}    3-m syndrome 2  {3-M syndrome 2}    273750

预期结果:

col1                                                col2            col3                       col4
THREE M SYNDROME 1  {3-M syndrome 1, 273750 (3)}    3-m syndrome 1 | 3-m syndrome 2 {3-M syndrome 1} | {3-M syndrome 2} 273750

当前代码及问题

使用以下代码后,结果中缺少col4:

join_unique = lambda x: ' | '.join(x.unique())
df2= df.groupby(['preferred_title_symbol'], as_index=False).agg(join_unique)

原因及解决方案

原因

  1. col4为数值类型(如整数),x.unique()返回数值数组,直接用str.join()会触发类型错误,Pandas会自动跳过无法聚合的列,导致col4丢失。
  2. 分组列名与示例数据中的列名不匹配(示例中分组列应为col1,而非preferred_title_symbol)。

解决代码

方案1:统一处理所有列(兼容字符串/数值类型)

修改聚合函数,先将所有元素转为字符串再进行拼接,同时修正分组列名:

join_unique = lambda x: ' | '.join(map(str, x.unique()))
# 确保分组列名与实际DataFrame一致,示例中为col1
df2 = df.groupby(['col1'], as_index=False).agg(join_unique)

方案2:针对不同列指定聚合逻辑

如果希望数值列在唯一值仅一个时保留原格式,可自定义各列的聚合规则:

agg_rules = {
    'col2': lambda x: ' | '.join(x.unique()),
    'col3': lambda x: ' | '.join(x.unique()),
    'col4': lambda x: x.unique()[0]  # 直接取唯一值(示例中该列值无重复)
}
df2 = df.groupby(['col1'], as_index=False).agg(agg_rules)

以上两种方式都能确保col4被正确包含在聚合结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:12:06