如何将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
相关产品推荐
相关产品推荐

