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

如何基于DataFrame列表生成含产品特征列的命名表格?

嘿,这个场景我之前帮同事处理过类似的,8000+产品ID完全不用纠结拆分列表的问题,咱们用Pandas的原生方法就能高效搞定,而且性能也不会拉胯。下面是具体的实现步骤,你可以直接套用:

完整解决方案

1. 先合并所有特征DataFrame

把d2列表里的各个小特征表合并成一个完整的长格式特征表,这样后续处理更方便。如果有重复的「产品ID-特征ID」组合,记得先去重避免冲突:

import pandas as pd

# 合并d2列表中的所有DataFrame,重置索引并去重
combined_features = pd.concat(d2, ignore_index=True).drop_duplicates(subset=['产品ID', '特征ID'], keep='first')

2. 转换为宽格式特征表(特征ID作为列)

这一步是核心,用pivot把长表转成每个特征ID对应一列的宽表,同时直接把缺失的特征值填充为0:

# 转宽表,索引设为产品ID,列是特征ID,值为特征值,缺失填0
wide_features = combined_features.pivot(
    index='产品ID',
    columns='特征ID',
    values='特征值'
).fillna(0).reset_index()

要是你的特征值不是数值类型,可以根据实际情况调整填充值,但一般特征都是数值型,fillna(0)足够用。

3. 和原始bundle表关联

最后把处理好的宽表和bundle按产品ID做左连接,确保bundle里的所有产品都能保留,缺失的特征列自动填充0:

# 左连接保留bundle的所有行,缺失特征填0
final_df = pd.merge(bundle, wide_features, on='产品ID', how='left').fillna(0)

针对大数量产品的性能优化

如果8000+产品ID搭配大量特征导致内存紧张,可以试试这两个小技巧:

  • 提前把「产品ID」和「特征ID」转为category类型,能大幅降低内存占用,提升处理速度:
combined_features['产品ID'] = combined_features['产品ID'].astype('category')
combined_features['特征ID'] = combined_features['特征ID'].astype('category')
  • 如果d2里的单个DF本身就有重复数据,建议在合并前就对每个DF单独去重,减少合并后的数据量。

我之前用这个方法处理过10w+产品ID的场景,全程流畅没卡顿,你可以放心试~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:52