You need to enable JavaScript to run this app. 如何基于ID与Time字段合并Pandas DataFrame中的分散数据行
优惠活动
大模型
产品
解决方案
定价
更多

如何基于ID与Time字段合并Pandas DataFrame中的分散数据行

实现方案

你之前仅调用df.groupby(['ID', 'Time'])仅会创建分组实例对象,没有指定聚合逻辑,因此不会返回合并后的结果表,按如下步骤操作即可得到预期结果:

步骤1:空值格式兼容

首先确保表中的空值是Pandas可识别的空类型,如果你表中的Nan是字符串格式,先做替换:

import pandas as pd
df = df.replace('Nan', pd.NA)

步骤2:分组聚合

因为每个(ID, Time)分组下的每一列仅存在一个有效非空值,直接聚合提取非空值即可,最稳妥的写法不受字段值的行顺序影响:

result = df.groupby(['ID', 'Time'], as_index=False).agg(lambda col: col.dropna().iloc[0])

扩展方案(处理脏数据场景)

如果担心分组内同一列存在多个冲突的非空值,可自定义聚合逻辑,以下两种可选:

  • 存在多个有效值时取最后一个有效值
result = df.groupby(['ID', 'Time'], as_index=False).agg(lambda col: col.dropna().iloc[-1])
  • 存在多个有效值时抛出异常,方便排查数据问题
def get_unique_value(col):
    valid_values = col.dropna().unique()
    if len(valid_values) > 1:
        raise ValueError(f"分组存在多个冲突值:{valid_values}")
    return valid_values[0] if len(valid_values) > 0 else pd.NA

result = df.groupby(['ID', 'Time'], as_index=False).agg(get_unique_value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:12:00