我有一个包含30-40列的pandas数据框架,其中包含1或0。如何获得一个新的列与int等于对应字符串的二进制数?例如,第一行应该给出
int('10101',2)
>>> 21
<表类>——f22 f43 f242 f243 f244 tbody><<tr>1 0 1 0 1 10 1 0 0 0 0 0 0 1 10 1 0 1 0 0 0 0 1 表类>
我们可以在数学上做到这一点,通过基于DataFrame的宽度创建一系列2的幂。然后mul
和sum
跨行:
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
Setup and imports:
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]
})