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

如何将pandas DataFrame中0和1组成的行转换为对应二进制值的整数新列

pandas实现0/1列行转十进制的解决方法

两种常用实现方案,效率和可读性各有优势,可根据数据量选择:


方案1:向量化点乘运算(推荐,大数据量下性能更高)

核心思路是提前给每一列计算对应的二进制位权重,直接通过矩阵乘法求和得到结果,全程无循环,性能最优。
代码示例:

import pandas as pd
import numpy as np

# 选中所有需要参与二进制转换的0/1列,可按需筛选
bin_cols = df.columns
# 生成每列对应的权重:从左到右对应二进制高位到低位,权重依次为2^(列数-1)、2^(列数-2) ... 2^0
weights = 2 ** np.arange(len(bin_cols)-1, -1, -1)
# 计算得到十进制值,写入新列
df['decimal_val'] = df[bin_cols].dot(weights)

方案2:字符串拼接转换(可读性高,适合小数据量)

核心思路是把每行的0/1值拼接成二进制字符串,直接调用内置方法转十进制,代码更直观好理解。
代码示例:

# 先把所有值转成字符串,按行拼接为二进制字符串,再转十进制整数
df['decimal_val'] = df[bin_cols].astype(str).agg(''.join, axis=1).apply(lambda x: int(x, base=2))

注意事项

  • 转换前请确认bin_cols的列顺序和你预期的二进制位高低顺序一致,列顺序变化会直接导致最终计算结果错误。
  • 你提供的示例数据用以上两种方法计算,第一行结果都是21,和示例要求的转换逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03