我有一個布爾熊貓數據框,如下轉換布爾數據幀,以二進制數陣列
aaa = pd.DataFrame([[False,False,False], [True,True,True]])
我想將它轉換爲二進制數陣列,該數據幀「AAA」, 結果是[000111 ]
如何實現此轉換?
任何幫助將不勝感激。由於
我有一個布爾熊貓數據框,如下轉換布爾數據幀,以二進制數陣列
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
是
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).astype(str)
[''.join(i) for i in aaa.values.tolist()]
您可以通過一個bit shifted operator相乘來模擬兩個總和,然後將其轉換成二進制
aaa.mul(np.arange(3)[::-1] << 1).sum(1).apply(bin)
0 0b0
1 0b110
dtype: object
注意權力如何np.arange(3)[::-1] << 1
是2
array([4, 2, 0])
您可以進一步操作str
操作
aaa.mul(
np.arange(3)[::-1] << 1
).sum(1).apply(bin).str.replace('0b', '').str.zfill(3)
0 000
1 110
dtype: object
我會做下列之一:
a.astype(int).astype(str).sum(axis=1).astype(int).astype(str)
但是這是一個有點過分重新輸入我的口味。
另一種可能是使用應用:
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:])
乘法是一個好主意! – faithefeng