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

转换Pandas整数DataFrame:新增列并生成二进制矩阵(Python)

Pandas列表转退避矩阵的高效实现(Numpy版)

原始数据

import pandas as pd
import numpy as np

data = {
    'object_1': [1, 3, 4, 50],
    'object_2': [1, 50],
    'object_3': [1, 3, 4, 5, 50],
    'object_4': [3, 5, 47, 48]
}

实现方案

以下是基于Numpy的无循环高效实现,直接生成目标退避矩阵:

# 提取所有出现过的数值并去重排序
all_values = []
for vals in data.values():
    all_values.extend(vals)
unique_vals = sorted(set(all_values))

# 初始化二进制矩阵,行数对应object数量,列数对应唯一值数量
binary_matrix = np.zeros((len(data), len(unique_vals)), dtype=int)

# 批量匹配并填充1
for row_idx, vals in enumerate(data.values()):
    # 找到当前object数值在unique_vals中的位置
    match_indices = np.isin(unique_vals, vals)
    binary_matrix[row_idx, match_indices] = 1

# 转换为DataFrame并设置索引和列名
result_df = pd.DataFrame(
    binary_matrix,
    index=data.keys(),
    columns=[str(val) for val in unique_vals]
)

print(result_df)

输出结果

1  3  4  5  47  48  50
object_1  1  1  1  0   0   0   1
object_2  1  0  0  0   0   0   1
object_3  1  1  1  1   0   0   1
object_4  0  1  0  1   1   1   0

方案说明

  • 利用np.isin批量匹配数值位置,避免逐元素循环,大幅提升效率
  • 仅保留出现过的数值作为列,自动实现"删除全0列"的要求
  • Numpy矩阵操作比纯Pandas操作更适合大规模数据场景

内容的提问来源于stack exchange,提问作者Mr.Slow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:45:34