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

Pandas按指定列分组合并多行、行内去重并填充空值实现方案

pandas 实现代码

import pandas as pd
import numpy as np

# 构造初始DataFrame
df1 = pd.DataFrame(
    {   
        "day":     ["monday", "monday","Tuesday" ],
        "column0": ["xx",      "xx",     ""],
        "column1": ["yy",      "aa",    "bb"],
        "column2": ["cc",      "cc",    "cc"],
        "column3": ["cc",      "",      "aa"]
    }
)

# ---------------------- 第一步:按day分组合并为单行,得到第一次处理结果 ----------------------
def merge_group(group):
    # 拼接组内原行索引为字符串
    index_col = ','.join(group.index.astype(str).tolist())
    # 拉平组内所有列(除day列)的值
    flatten_values = group.drop(columns='day').values.flatten().tolist()
    return pd.Series([group.name, index_col] + flatten_values)

# 分组聚合得到第一次处理结果
first_result = df1.groupby('day', as_index=False).apply(merge_group).reset_index(drop=True)
# 重命名列名
first_result.columns = ['day', 'index'] + [f'column{i}' for i in range(len(first_result.columns)-2)]
# 第一次处理结果可直接打印first_result查看,和你预期的第一次输出一致

# ---------------------- 第二步:行内去重、空值替换为NAN ----------------------
def row_deduplication(row):
    existed = set()
    new_row = []
    for val in row:
        # 空字符串直接替换为NAN
        if val == '':
            new_row.append(np.nan)
            continue
        # 重复值替换为NAN
        if val in existed:
            new_row.append(np.nan)
        else:
            existed.add(val)
            new_row.append(val)
    return pd.Series(new_row, index=row.index)

final_result = first_result.copy()
# 仅对数值列做去重处理,day和index列保留原内容
value_cols = [col for col in final_result.columns if col not in ['day', 'index']]
final_result[value_cols] = final_result[value_cols].apply(row_deduplication, axis=1)
# 删除全为NAN的空列
final_result = final_result.dropna(axis=1, how='all')
# 可选:如果需要把NAN显示为字符串'NAN'和示例对齐,保留下面这行,不需要可删除
final_result = final_result.fillna('NAN')

# 打印最终结果
print(final_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:02