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

如何利用列表/字典高效处理DataFrame中二进制浮点数的映射转换

解决方案:基于矢量化操作高效处理二进制浮点数映射

针对你的需求,我们可以利用Pandas和NumPy的矢量化操作避免循环,高效完成两种格式的转换(水果名称拼接、多列Yes/No标识)。以下是具体实现步骤:

前置准备

先导入依赖库并构造示例数据(模拟你的4000行DataFrame场景):

import pandas as pd
import numpy as np

var_list = ["Apple", "Banana", "Orange"]
# 示例DataFrame,var列是二进制对应的十进制浮点数(如010对应2.0,101对应5.0)
df = pd.DataFrame({'var': [1.0, 2.0, 4.0, 6.0, 7.0, 0.0]})

第一步:将二进制浮点数转换为固定长度的二进制字符串

先把浮点数转为整数(因为你的var列是二进制值对应的十进制浮点数),再转换为补全到len(var_list)位的二进制字符串:

# 转换为整数→二进制字符串→补全到3位(匹配var_list长度)
df['binary_str'] = df['var'].astype(int).apply(lambda x: bin(x)[2:].zfill(len(var_list)))

需求1:映射为水果名称拼接形式

利用NumPy的矢量化矩阵乘法快速拼接选中的水果:

# 将二进制字符串转为布尔掩码矩阵(每一行对应一个样本的水果选中状态)
mask = np.array([list(s) for s in df['binary_str']]).astype(bool)
# 批量拼接选中的水果,最后去除末尾多余的"+"
df['fruit_combined'] = mask.dot(np.array(var_list) + '+').str.rstrip('+')
# 处理全0的情况(可选)
df['fruit_combined'] = df['fruit_combined'].replace('', 'None')

示例输出片段:

varbinary_strfruit_combined
2.0010Banana
6.0110Apple+Banana
0.0000None

需求2:转换为多列Yes/No标识格式

利用Pandas的字符串矢量化操作快速生成多列:

# 拆分二进制字符串为单独列,转换为Yes/No
fruit_cols = pd.DataFrame(
    # 拆分字符串并提取有效位(跳过首尾空字符)
    df['binary_str'].str.split('', expand=True).iloc[:, 1:len(var_list)+1].values == '1',
    columns=var_list
).replace({True: 'Yes', False: 'No'})

# 合并到原DataFrame
df = pd.concat([df, fruit_cols], axis=1)

示例输出片段:

varAppleBananaOrange
1.0NoNoYes
4.0YesNoNo
7.0YesYesYes

效率说明

所有操作均采用Pandas/NumPy的矢量化接口,避免了Python层面的循环遍历,处理4000行数据的耗时在毫秒级,远快于循环实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:39:22