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

如何在DataFrame中合并相同ID的特征并补零生成新列?

按ID合并DataFrame特征并填充缺失值为0的解决方案

假设你的DataFrame里存在重复ID,每个ID对应不同特征的零散值,要把同一ID的所有特征合并到一行、缺失部分填0,下面是几种实用的pandas处理方法:

方法1:分组取最大值+填充0(最常用)

如果每个ID的同一特征最多只有一个非空有效值(不会出现同一ID的Feature1有两个不同数值的情况),直接用groupby配合max就能快速合并,再把NaN替换成0:

import pandas as pd

# 假设你的数据集是df
merged_df = df.groupby('ID').max().fillna(0).reset_index()
  • groupby('ID'):按ID把数据分组
  • max():保留每组每个特征的非空值(NaN不影响最大值计算)
  • fillna(0):把所有剩余的空值替换成0
  • reset_index():把ID从索引变回普通列

方法2:用透视表直接填充

pivot_table自带填充参数,适合需要更灵活配置的场景:

merged_df = pd.pivot_table(
    df,
    index='ID',
    values=df.columns.drop('ID'),  # 指定要聚合的特征列
    aggfunc='max',  # 用max保留非空值,也可以用'first'/'last'
    fill_value=0
).reset_index()

这里fill_value=0会在生成透视表时直接把缺失的位置填0,省去后续填充步骤。

方法3:处理同一特征多有效值的情况

如果同一ID的同一特征存在多个不同有效值(比如同一ID的Feature1有两个数值),可以自定义聚合函数把它们合并:

def combine_features(x):
    # 取出非空值列表
    valid_vals = x.dropna().tolist()
    if not valid_vals:
        return 0
    elif len(valid_vals) == 1:
        return valid_vals[0]
    else:
        # 可以把多值拼成字符串,或者保留列表,按需调整
        return ','.join(map(str, valid_vals))

merged_df = df.groupby('ID').agg(combine_features).reset_index()

示例验证

比如原数据是:

df = pd.DataFrame({
    'ID': [1,1,2,3],
    'FeatureA': [5, None, 8, None],
    'FeatureB': [None, 10, None, None]
})

用方法1处理后得到的结果:

IDFeatureAFeatureB
1510
280
300

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:40:27