首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据帧中的十进制拆分为多个二进制列

将数据帧中的十进制拆分为多个二进制列
EN

Stack Overflow用户
提问于 2021-12-23 09:34:45
回答 1查看 130关注 0票数 2

数据帧有一个“十进制”列,我需要将十进制转换成特定的二进制列。

示例:3(十进制)-> 0000000000000011 (二进制)

代码语言:javascript
复制
df 
| datetime                | mc | vol | decimal |
|-------------------------|----|-----|---------|
| 2021-11-20 12:04:55.107 | PR | 50  | 1       |
| 2021-11-20 12:04:56.187 | PR | 50  | 1       |
| 2021-11-20 12:04:57.200 | PR | 50  | 3       |
| 2021-11-20 12:04:58.310 | PR | 50  | 3       |
| 2021-11-20 12:04:59.467 | PR | 50  | 5       |
| 2021-11-20 12:05:00.500 | PR | 50  | 5       |

步骤1:使用代码,我得到了下面的二进制表。二进制(0~15)

代码语言:javascript
复制
df_test['binary'] = df.decimal.apply(lambda x: format(int(x), '016b'))
代码语言:javascript
复制
| datetime                | mc | vol | binary           |
|-------------------------|----|-----|------------------|
| 2021-11-20 12:04:55.107 | PR | 50  | 0000000000000001 |
| 2021-11-20 12:04:56.187 | PR | 50  | 0000000000000001 |
| 2021-11-20 12:04:57.200 | PR | 50  | 0000000000000011 |
| 2021-11-20 12:04:58.310 | PR | 50  | 0000000000000011 |
| 2021-11-20 12:04:59.467 | PR | 50  | 0000000000000101 |
| 2021-11-20 12:05:00.500 | PR | 50  | 0000000000000101 |

步骤2:选择值并创建新列

代码语言:javascript
复制
df['B15'] = df['binary'].str[15]
df['B14'] = df['binary'].str[14]
df['B13'] = df['binary'].str[13]
df['B12'] = df['binary'].str[12]
df['B11'] = df['binary'].str[11]

要求如下:

代码语言:javascript
复制
| datetime                | mc | vol | B11 | B12 | B13 | B14 | B15  |
|-------------------------|----|-----|-----|-----|-----|-----|------|
| 2021-11-20 12:04:55.107 | PR | 50  | 0   | 0   | 0   | 0   | 1    |
| 2021-11-20 12:04:56.187 | PR | 50  | 0   | 0   | 0   | 0   | 1    |
| 2021-11-20 12:04:57.200 | PR | 50  | 0   | 0   | 0   | 1   | 1    |
| 2021-11-20 12:04:58.310 | PR | 50  | 0   | 0   | 0   | 1   | 1    |
| 2021-11-20 12:04:59.467 | PR | 50  | 0   | 0   | 1   | 0   | 1    |
| 2021-11-20 12:05:00.500 | PR | 50  | 0   | 0   | 1   | 0   | 1    |

有没有其他有效的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-23 14:51:47

如果只需要最后5位,可以使用unpackbits

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({'mc': ['PR', 'PR', 'PR', 'PR', 'PR', 'PR'],
                   'vol': [50, 50, 50, 50, 50, 50],
                   'decimal': [1, 1, 3, 3, 5, 5]})

bits = pd.DataFrame(np.unpackbits(df.decimal.to_numpy(np.uint8)[:, np.newaxis], axis=1)[:,-5:],
                    columns=[f'B{i}' for i in range(11, 16)])
res = pd.concat((df[['mc', 'vol']], bits),axis=1)

结果:

代码语言:javascript
复制
   mc  vol  B11  B12  B13  B14  B15
0  PR   50    0    0    0    0    1
1  PR   50    0    0    0    0    1
2  PR   50    0    0    0    1    1
3  PR   50    0    0    0    1    1
4  PR   50    0    0    1    0    1
5  PR   50    0    0    1    0    1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70460140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档