pandas 为分类列中的每个值创建新列

pandas creating new columns for each value in categorical columns

我有一个 pandas 数据框,其中包含一些数字列和一些分类列。我想为每个分类列的每个值创建一个新列,并在该值为 true 的每一行中为该列赋予值 1,在该值为 false 的每一行中为该列赋予 0。所以 df 是这样的 -

col1          col2         col3
 A             P            1
 B             P            3
 A             Q            7

预期结果是这样的:

col1          col2         col3      A        B       P        Q
 A             P            1        1        0       1        0
 B             P            3        0        1       1        0
 A             Q            7        1        0       0        1

这可能吗?有人可以帮我吗?

使用df.select_dtypes, pd.get_dummies with pd.concat:

# First select all columns which have object dtypes
In [826]: categorical_cols = df.select_dtypes('object').columns    

# Create one-hot encoding for the above cols and concat with df
In [817]: out = pd.concat([df, pd.get_dummies(df[categorical_cols])], 1)
   
In [818]: out
Out[818]: 
  col1 col2  col3  col1_A  col1_B  col2_P  col2_Q
0    A    P     1       1       0       1       0
1    B    P     3       0       1       1       0
2    A    Q     7       1       0       0       1