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

如何分组DataFrame并合并指定列的不同值,按需返回空DataFrame?

分组合并指定列的解决方案

需求回顾

  • 按除倒数第二列外的所有列分组,将同一组内的倒数第二列值合并到一行
  • 若整个DataFrame中column_1与last_column的取值完全统一(即所有行的column_1相同、所有行的last_column也相同),直接返回空DataFrame
  • 仅保留分组后行数≥2的结果组

完整代码实现

import pandas as pd

data = {'column_1': ['no', 'no', 'no', 'no'], 'column_2': ['spain', 'france', 'italy', 'germany'], "last_column": ['A', 'A', 'A', 'B']}
df = pd.DataFrame.from_dict(data)

# 先判断是否需要直接返回空DataFrame
if df['column_1'].nunique() == 1 and df['last_column'].nunique() == 1:
    result = pd.DataFrame()
else:
    # 确定分组列:排除倒数第二列
    group_cols = df.columns.drop(df.columns[-2])
    # 分组聚合+过滤有效组
    result = df.groupby(group_cols, as_index=False).agg(
        column_2=('column_2', ', '.join),  # 合并column_2的值
        group_size=('column_2', 'size')     # 统计每组行数
    ).query('group_size >= 2').drop(columns='group_size')

print(result)

代码说明

  1. 特殊情况判断:用nunique()检查column_1和last_column是否全表只有唯一值,是则直接返回空DataFrame
  2. 分组列确定:通过df.columns[-2]定位倒数第二列,从所有列中排除它得到分组依据
  3. 聚合与过滤:
    • 对column_2使用', '.join合并同组内的所有值
    • 用size统计每组行数,仅保留行数≥2的组(避免单一行的组被保留)
    • 最后删除用于过滤的统计列,得到目标结果

测试结果

  • 示例数据运行后,会得到column_1为no、last_column为A、column_2为spain, france, italy的一行结果
  • 若将示例数据的last_column全改为A,则会返回空DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:25:18