加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将零和1的列解释为二进制并将其存储为整数列

发布时间:2020-12-20 11:52:16 所属栏目:Python 来源:网络整理
导读:我有一个0和1的数据帧.我想将每个列视为其值是整数的二进制表示.进行此转换的最简单方法是什么? 我要这个: df = pd.DataFrame([[1,1],[1,1,0],[0,1]])print df 0 1 20 1 0 11 1 1 02 0 1 13 0 0 1 转换成: 0 121 62 11dtype: int64 尽可能高效. 解决方法
我有一个0和1的数据帧.我想将每个列视为其值是整数的二进制表示.进行此转换的最简单方法是什么?

我要这个:

df = pd.DataFrame([[1,1],[1,1,0],[0,1]])

print df

   0  1  2
0  1  0  1
1  1  1  0
2  0  1  1
3  0  0  1

转换成:

0    12
1     6
2    11
dtype: int64

尽可能高效.

解决方法

类似的解决方案,但更快:

print (df.T.dot(1 << np.arange(df.shape[0] - 1,-1,-1)))
0    12
1     6
2    11
dtype: int64

时序:

In [81]: %timeit df.apply(lambda col: int(''.join(str(v) for v in col),2))
The slowest run took 5.66 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops,best of 3: 264 μs per loop

In [82]: %timeit (df.T*(1 << np.arange(df.shape[0]-1,-1))).sum(axis=1)
1000 loops,best of 3: 492 μs per loop

In [83]: %timeit (df.T.dot(1 << np.arange(df.shape[0] - 1,-1)))
The slowest run took 6.14 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops,best of 3: 204 μs per loop

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读