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

多列重复时合并对应列值至单列问题求助(groupby尝试失败)

问题解决:按多列分组合并去重非空值

现有如下DataFrame,需按Name、Filename、delimetier三列分组,将每组内的good delimeter和bad delimeter列的值合并为逗号分隔的字符串,同时忽略空值与重复值。尝试使用groupby()方法未成功,以下是可行方案:

原始DataFrame

Name| Filename| delimetier| good delimeter| bad delimeter
A     123       48         a                A
A     123       48                          A
B     123       48         b                C
C     123       49         c                B
A     123       48         d                D
A     123       48         c                E
B     123       48         d                F

期望结果

Name| Filename| delimetier| good delimeter| bad delimeter
A     123       48         a, c, d          A, D, E
B     123       48         b, d             C, F
C     123       49         c                B

解决方案代码

import pandas as pd

# 构造原始DataFrame
data = {
    'Name': ['A', 'A', 'B', 'C', 'A', 'A', 'B'],
    'Filename': [123, 123, 123, 123, 123, 123, 123],
    'delimetier': [48, 48, 48, 49, 48, 48, 48],
    'good delimeter': ['a', '', 'b', 'c', 'd', 'c', 'd'],
    'bad delimeter': ['A', 'A', 'C', 'B', 'D', 'E', 'F']
}
df = pd.DataFrame(data)

# 定义聚合函数:过滤空值、去重后用逗号连接
def aggregate_col(series):
    # 过滤空字符串,去重,保持结果有序
    unique_vals = [val for val in series.unique() if val.strip() != '']
    return ', '.join(unique_vals)

# 按指定列分组,应用聚合函数到目标列
result_df = df.groupby(['Name', 'Filename', 'delimetier']).agg({
    'good delimeter': aggregate_col,
    'bad delimeter': aggregate_col
}).reset_index()

print(result_df)

代码说明

  • 自定义的aggregate_col函数会先对分组后的列值去重,过滤掉空字符串,再用逗号连接成字符串
  • 使用groupby按Name、Filename、delimetier分组,对good delimeter和bad delimeter分别应用聚合函数
  • 最后用reset_index()将分组后的索引转为普通列,得到和期望结果一致的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:25:20