如何将 1 和 0 的行转换为新的 int 列

Posted

技术标签:

【中文标题】如何将 1 和 0 的行转换为新的 int 列【英文标题】:How to convert row of 1s and 0s to a new int column 【发布时间】:2021-12-08 15:07:28 【问题描述】:

我有一个包含 1 或 0 列的 30-40 列的 pandas 数据框。如何获得一个新列,其 Ints 等于对应字符串的二进制数?例如,第一行应该给出

int('10101',2)
>>> 21
f22 f43 f242 f243 f244
1 0 1 0 1
1 0 1 0 0
0 0 0 0 1
1 0 1 0 1
0 0 0 0 1

【问题讨论】:

【参考方案1】:

我们可以通过基于 DataFrame 的宽度创建一系列 2 的幂来在数学上做到这一点。然后mulsum 跨行:

s = pd.Series(reversed([2 ** i for i in range(df.columns.size)]),
              index=df.columns)
df['result'] = df.mul(s, axis=1).sum(axis=1)

df:

   f22  f43  f242  f243  f244  result
0    1    0     1     0     1      21
1    1    0     1     0     0      20
2    0    0     0     0     1       1
3    1    0     1     0     1      21
4    0    0     0     0     1       1

s供参考:

f22     16
f43      8
f242     4
f243     2
f244     1
dtype: int64

设置和导入:

import pandas as pd

df = pd.DataFrame(
    'f22': [1, 1, 0, 1, 0],
    'f43': [0, 0, 0, 0, 0],
    'f242': [1, 1, 0, 1, 0],
    'f243': [0, 0, 0, 0, 0],
    'f244': [1, 0, 1, 1, 1]
)

【讨论】:

以上是关于如何将 1 和 0 的行转换为新的 int 列的主要内容,如果未能解决你的问题,请参考以下文章

pandas:将 int Series 转换为新的 StringDtype

如何在多级列(熊猫)中将一级索引转换为新级别

如何在熊猫数据框中找到标准匹配上方和下方的x行,然后将它们保存为新的df?

将 pandas Dataframe 的行转换为可迭代的字符串列表

将整数转换为新的浮点格式

将点坐标转换为新的坐标系