Python 在DataFrame中将字符串列转换为布尔指示符列

Python 在DataFrame中将字符串列转换为布尔指示符列,python,pandas,Python,Pandas,我有一个带有一些数值和一些分类(str)值的熊猫数据框,让我们这样说: A B C D 0 x y a 2 1 x x aa 1 2 y z aa 4 3 y z aa 4 4 x y aaaa 0 我想把所有的分类值转换成布尔指标。由于某些列可以具有相同的值名称,因此我希望为要区分的分类值创建名称,例如列_name+'is+value _name 预期结果是: D A_is_x A_is_y B_is_y

我有一个带有一些数值和一些分类(str)值的熊猫数据框,让我们这样说:

   A  B     C  D
0  x  y     a  2
1  x  x    aa  1
2  y  z    aa  4
3  y  z    aa  4
4  x  y  aaaa  0
我想把所有的分类值转换成布尔指标。由于某些列可以具有相同的值名称,因此我希望为要区分的分类值创建名称,例如列_name+'is+value _name

预期结果是:

   D  A_is_x  A_is_y  B_is_y  B_is_x  B_is_z  C_is_a  C_is_aa  C_is_aaaa
0  2    True   False    True   False   False    True    False      False
1  1    True   False   False    True   False   False     True      False
2  4   False    True   False   False    True   False     True      False
3  4   False    True   False   False    True   False     True      False
4  0    True   False    True   False   False   False    False       True
我写了一些有效的代码,但不是很像Python

    for col in data.columns:
    if not np.issubdtype(data[col].dtypes, np.number):
        values = data[col].unique()
        for value in values:
            data[col + '_is_' + value] = data[col].map(lambda x: x == value)
        data = data.drop(col, axis=1)
我尝试使用pd.get_假人来编写这篇文章,但在方便地命名新创建的列时遇到了问题。有没有比我的更简单更干净的解决办法

我知道有一些相关的问题,但没有一个能解决我在方便地命名列方面的问题。

与参数一起使用
前缀\u sep='''u is'
dtype=bool
,数字列不在处理中-是您需要的第一个数据:

df = pd.get_dummies(df, prefix_sep='_is_', dtype=bool)

print (df)
   D  A_is_x  A_is_y  B_is_x  B_is_y  B_is_z  C_is_a  C_is_aa  C_is_aaaa
0  2    True   False   False    True   False    True    False      False
1  1    True   False    True   False   False   False     True      False
2  4   False    True   False   False    True   False     True      False
3  4   False    True   False   False    True   False     True      False
4  0    True   False   False    True   False   False    False       True
与参数
前缀\u sep=''一起使用

df = pd.get_dummies(df, prefix_sep='_is_', dtype=bool)

print (df)
   D  A_is_x  A_is_y  B_is_x  B_is_y  B_is_z  C_is_a  C_is_aa  C_is_aaaa
0  2    True   False   False    True   False    True    False      False
1  1    True   False    True   False   False   False     True      False
2  4   False    True   False   False    True   False     True      False
3  4   False    True   False   False    True   False     True      False
4  0    True   False   False    True   False   False    False       True

检查
get_dummies

df = df[['D']].join(pd.get_dummies(df[['A', 'B', 'C']], prefix_sep='_is_').astype(bool))
df
Out[390]: 
   D  A_is_x  A_is_y  B_is_x  B_is_y  B_is_z  C_is_a  C_is_aa  C_is_aaaa
0  2    True   False   False    True   False    True    False      False
1  1    True   False    True   False   False   False     True      False
2  4   False    True   False   False    True   False     True      False
3  4   False    True   False   False    True   False     True      False
4  0    True   False   False    True   False   False    False       True

检查
get_dummies

df = df[['D']].join(pd.get_dummies(df[['A', 'B', 'C']], prefix_sep='_is_').astype(bool))
df
Out[390]: 
   D  A_is_x  A_is_y  B_is_x  B_is_y  B_is_z  C_is_a  C_is_aa  C_is_aaaa
0  2    True   False   False    True   False    True    False      False
1  1    True   False    True   False   False   False     True      False
2  4   False    True   False   False    True   False     True      False
3  4   False    True   False   False    True   False     True      False
4  0    True   False   False    True   False   False    False       True