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

使用pd.groupby().agg()拼接行时遇到的问题

解决方法

问题出在两处:

  1. 分组逻辑不够明确,且变量名存在笔误(代码中的df1未定义,应为原DataFramedf);
  2. 直接对MAJOR列执行拼接会把np.nan当作字符串混入结果,同时未明确指定各列的聚合规则,导致结果不符合预期。

以下是修正后的完整实现:

1. 核心思路

  • 按['NAME', 'STATE']分组(满足每个NAME对应唯一STATE的前提);
  • 对MAJOR列先过滤空值,再用逗号拼接非空项;
  • 对SCHOOL列直接拼接所有值(若存在空值可参照MAJOR的过滤逻辑)。

2. 完整代码

import pandas as pd
import numpy as np

# 构造原始数据
NAME = ['BOB', 'BOB', 'BOB', 'SUE', 'SUE', 'MARY', 'JOHN', 'JOHN', 'MARK', 'MARK', 'MARK', 'MARK']
STATE = ['CA','CA','CA','DC','DC','PA','GA','GA','NY','NY','NY','NY']
MAJOR = ['MARKETING','BUSINESS ADM',np.nan,'ECONOMICS','MATH','PSYCHOLOGY','HISTORY','BUSINESS ADM','MATH', 'MEDICAL SCIENCES',np.nan,np.nan]
SCHOOL = ['UCLA','UCSB','CAL STATE','HARVARD','WISCONSIN','YALE','CHICAGO','MIT','UCSD','UCLA','CAL STATE','COMMUNITY']
data = {'NAME':NAME, 'STATE':STATE,'MAJOR':MAJOR, 'SCHOOL':SCHOOL}
df = pd.DataFrame(data)

# 分组聚合:明确指定每列的处理规则
result = df.groupby(['NAME', 'STATE']).agg(
    MAJOR=('MAJOR', lambda col: ', '.join(col.dropna())),
    SCHOOL=('SCHOOL', lambda col: ', '.join(col))
).reset_index()

print(result)

3. 输出结果

执行后得到结构化表格:

NAMESTATEMAJORSCHOOL
BOBCAMARKETING, BUSINESS ADMUCLA, UCSB, CAL STATE
JOHNGAHISTORY, BUSINESS ADMCHICAGO, MIT
MARKNYMATH, MEDICAL SCIENCESUCSD, UCLA, CAL STATE, COMMUNITY
MARYPAPSYCHOLOGYYALE
SUEDCECONOMICS, MATHHARVARD, WISCONSIN

关键说明

  • 使用groupby(['NAME', 'STATE'])确保分组的唯一性,避免因列名筛选遗漏导致的逻辑错误;
  • 用col.dropna()过滤MAJOR列的空值,避免无效字符串混入结果;
  • agg()的字典式参数可以精准指定每一列的聚合规则,解决原代码仅返回单列的问题;
  • reset_index()将分组索引转为普通列,得到符合需求的标准表格格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:55:26