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

如何基于多列相同值合并pandas DataFrame中的多行数据

解决代码

你可以通过分组聚合直接提取每列的唯一非空值实现需求,适配字符串、数值等所有数据类型,符合你提到的「同分组下每列仅存在一个非NaN值」的前置条件:

import pandas as pd
import numpy as np

df = df.groupby(
    by=["id", "date", "freq", "year"], 
    as_index=False
).agg(
    lambda col: col.dropna().iloc[0] if col.notna().any() else np.nan
)

报错原因说明

你之前使用max()抛出ValueError,通常是因为你的DataFrame存在非标准索引设置、或者分组键列存在异常值/重复定义导致的,上述聚合写法规避了max()对数据结构和类型的隐含要求,稳定性更强。

高效替代方案

如果你的数据量较大,可以使用填充去重的方案提升运行效率:

df = df.groupby(
    by=["id", "date", "freq", "year"],
    group_keys=False
).apply(
    lambda x: x.ffill().bfill()
).drop_duplicates(
    subset=["id", "date", "freq", "year"],
    keep="first"
)

两种方案都只会合并四列完全相同的行,不会跨组合并行,完全符合你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03