Python 将布尔数据帧转换为二进制数数组

Python 将布尔数据帧转换为二进制数数组,python,pandas,Python,Pandas,我有一个布尔数据框,如下所示 aaa = pd.DataFrame([[False,False,False], [True,True,True]]) 我想把它转换成二进制数数组,对于这个数据帧“aaa”, 结果是[000111] 如何实现此转换 任何帮助都将不胜感激。谢谢您可以: aaa = pd.DataFrame([[False,False,False], [True,True,True]]) aaa=aaa.astype(int) aaa =

我有一个布尔数据框,如下所示

aaa = pd.DataFrame([[False,False,False], [True,True,True]])
我想把它转换成二进制数数组,对于这个数据帧“aaa”, 结果是[000111]

如何实现此转换

任何帮助都将不胜感激。谢谢

您可以:

aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
然后,
aaa

    0   1   2
0   0   0   0
1   1   1   1
如果要获取数组
['000','111']
,可以执行以下操作:

aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
你可以做:

aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]
然后,
aaa

    0   1   2
0   0   0   0
1   1   1   1
如果要获取数组
['000','111']
,可以执行以下操作:

aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int)
aaa = pd.DataFrame([[False,False,False],
                      [True,True,True]])
aaa=aaa.astype(int).astype(str)
[''.join(i) for i in aaa.values.tolist()]

您可以在
int
str
之后转换为
numpy数组
,然后:


您可以在
int
str
之后转换为
numpy数组
,然后:

你可以乘以a来模拟二的幂,求和,然后转换成二进制

aaa.mul(np.arange(3)[::-1] << 1).sum(1).apply(bin)

0      0b0
1    0b110
dtype: object
您可以通过使用
str
操作进一步实现这一点

aaa.mul(
    np.arange(3)[::-1] << 1
).sum(1).apply(bin).str.replace('0b', '').str.zfill(3)

0    000
1    110
dtype: object
aaa.mul(
你可以乘以a来模拟二的幂,求和,然后转换成二进制

aaa.mul(np.arange(3)[::-1] << 1).sum(1).apply(bin)

0      0b0
1    0b110
dtype: object
您可以通过使用
str
操作进一步实现这一点

aaa.mul(
    np.arange(3)[::-1] << 1
).sum(1).apply(bin).str.replace('0b', '').str.zfill(3)

0    000
1    110
dtype: object
aaa.mul(

np.arange(3)[:-1]我会做以下一件事:

a.astype(int).astype(str).sum(axis=1).astype(int).astype(str)
但这对我来说有点太重了

另一种可能性是使用apply:

a.astype(int).astype(str).apply(lambda x: ''.join(list(x)))
但在我看来最干净的是通过乘法获得所需的数字,然后将其转换为二进制:

a.dot([4, 2, 1]).map(lambda x: bin(x))
当然,如果您不想在开头使用“0b”,只需使用

a.dot([4, 2, 1]).map(lambda x: bin(x)[2:])

我将执行以下操作之一:

a.astype(int).astype(str).sum(axis=1).astype(int).astype(str)
但这对我来说有点太重了

另一种可能性是使用apply:

a.astype(int).astype(str).apply(lambda x: ''.join(list(x)))
但在我看来最干净的是通过乘法获得所需的数字,然后将其转换为二进制:

a.dot([4, 2, 1]).map(lambda x: bin(x))
当然,如果您不想在开头使用“0b”,只需使用

a.dot([4, 2, 1]).map(lambda x: bin(x)[2:])

乘法是个好主意!乘法是个好主意!