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

如何高效将Pandas DataFrame转换为车辆-颜色关联特征矩阵

高效实现DataFrame转换为特征矩阵的方法

针对你的需求,无需逐行赋值,Pandas提供了多种高效的内置方法,以下是几种最优实现:

方法一:使用pd.crosstab(推荐)

先对原数据按Color和Car去重,再用交叉表统计组合存在性:

import pandas as pd

df = pd.DataFrame({'Car': ['Audi', 'Toyota', 'Chrysler', 'Toyota', 'Chrysler', 'Chrysler'], 
                   'Color': ['red', 'red', 'blue', 'silver', 'blue', 'silver']})

# 去重,保留唯一的Color-Car组合
df_unique = df.drop_duplicates(subset=['Color', 'Car'])
# 生成交叉表,自动标记存在为1,不存在为0
result = pd.crosstab(df_unique['Color'], df_unique['Car']).reset_index()

print(result)

输出结果:

Car    Color  Audi  Chrysler  Toyota
0       blue     0         1       0
1        red     1         0       1
2     silver     0         1       1

方法二:使用pivot_table

通过透视表聚合去重后的组合,用size统计存在性:

df_unique = df.drop_duplicates(subset=['Color', 'Car'])
result = df_unique.pivot_table(index='Color', columns='Car', aggfunc='size', fill_value=0).reset_index()

方法三:使用get_dummies + groupby

将Car列转为哑变量后,按Color分组取最大值(只要存在则为1):

# 生成Car列的哑变量
df_dummies = pd.get_dummies(df['Car'])
# 合并Color列与哑变量,按Color分组取最大值
result = pd.concat([df['Color'], df_dummies], axis=1).groupby('Color').max().reset_index()

说明

  • 三种方法都避免了逐行赋值的低效操作,时间复杂度均为O(n)级别,远快于循环赋值
  • 去重步骤是关键:原数据中重复的Color-Car组合不影响最终标记结果,去重后能减少计算量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:15:43