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

如何将Pandas DataFrame每行二进制值转换为十进制整数Series?

嘿,我来帮你搞定这个二进制转十进制的问题!当你处理百万级(1e6行)的数据集时,用字符串拼接再转换的方法确实会有点拖慢速度,尤其是列数多的时候。这里给你几个更高效的方案,针对你n=5的固定列场景,速度提升特别明显:

方法一:数值矩阵乘法(最快首选)

这个方法完全避开字符串操作,直接利用二进制位的权重进行数值计算,速度快到离谱。思路是给每一列分配对应的2的幂次权重,然后让DataFrame和权重做矩阵乘法:

import pandas as pd
import numpy as np

# 生成你的测试数据
m = int(1e6)
n = 5
df = pd.DataFrame(np.random.rand(m,n)).round().astype(int)

# 定义每列的权重:假设每行从左到右是二进制的高位到低位(比如第一列是2^4,最后一列是2^0)
weights = 2 ** np.arange(n-1, -1, -1)
# 计算每行对应的十进制数,返回Series
decimal_series = df.dot(weights)

举个例子,如果某行是[1,0,1,0,1],对应的权重是[16,8,4,2,1],相乘求和就是16+4+1=21,完全符合二进制转十进制的逻辑。这个方法跑1e6行数据几乎瞬间完成,比字符串方法快几十倍都不止。

方法二:优化版字符串拼接(适合必须用字符串的场景)

如果你一定要保留字符串处理的思路,可以用agg结合''.join代替原来的sum,效率会比原方法高不少:

decimal_series = df.astype(str).agg(''.join, axis=1).apply(lambda x: int(x, 2))

不过还是那句话,这个方法的速度远不如数值计算,大数据量下不推荐。

方法三:Numpy位运算实现

用Numpy的位或和左移操作,也能高效完成转换,逻辑和方法一类似:

arr = df.to_numpy()
decimal_arr = np.zeros(m, dtype=int)
for i in range(n):
    # 把当前列的0/1左移对应位数,然后合并到结果里
    decimal_arr |= arr[:, i] << (n-1 - i)
decimal_series = pd.Series(decimal_arr)

这个方法的速度和方法一接近,也是纯数值运算,适合喜欢用底层位操作的同学。

总结一下:优先选方法一,代码简洁还超快,完全适配你的百万级数据集需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:16:56