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

Pandas按id匹配特征,缺失值补0生成固定顺序特征向量

实现方案

用pandas内置的透视表功能就可以快速实现,不需要写循环遍历,代码可直接运行:

import pandas as pd

# 原始输入数据
df = pd.DataFrame({
    'id': ['a', 'b', 'a', 'a', 'c', 'b'],
    'feature': ['aa', 'ab', 'ab', 'cc', 'ab', 'bb'],
    'value': [0.5, 0.1, 0.2, 0.3, 0.9, 1]
})
# 指定的固定顺序特征列表
feature_list = ['aa', 'ab', 'cc', 'bb']

核心处理代码:

# 行转列,缺失特征补0,同时强制列顺序和给定的feature_list一致
pivot_res = df.pivot_table(
    index='id',
    columns='feature',
    values='value',
    aggfunc='sum', # 同id同特征有多条记录时用求和聚合,无重复时该参数不影响结果
    fill_value=0
).reindex(columns=feature_list, fill_value=0)

# 组装成要求的输出格式
result = pd.DataFrame({
    'id': pivot_res.index,
    'feature_vector': pivot_res.values.tolist()
}).reset_index(drop=True)

输出结果完全匹配预期:

id  feature_vector
0  a  [0.5, 0.2, 0.3, 0]
1  b  [0.0, 0.1, 0.0, 1.0]
2  c  [0.0, 0.9, 0.0, 0.0]

注意点

  • 如果数据里存在同一个id对应同一个feature多条记录的情况,把aggfunc改成需要的聚合规则就行,比如取平均用'mean',取第一条用'first'
  • 必须加reindex步骤,否则pandas生成透视表时会自动对特征名做排序,无法匹配指定的特征顺序
  • 直接用.values.tolist()批量转列表比逐行apply效率高很多,数据量大的时候优势很明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:36:22