熊猫从一列中获取一种热编码为布尔值

时间:2019-06-25 16:40:57

标签: python pandas boolean

我正在考虑熊猫数据框。我想找到一种创建第二个Dataframe的有效方法。

import pandas as pd
data = {"column":[0,1,2,0,1,2,0]}   
df = pd.DataFrame(data) 
column
0
1
2
0
1
2
0
column0  column1 column2
true      false     false
false      true     false
false      false     true
true      false     false
false      true     false
false      false     true
true      false     false

3 个答案:

答案 0 :(得分:7)

这是一个get_dummies问题,但您还需要指定dtype=bool才能获得一列布尔值:

pd.get_dummies(df['column'], dtype=bool)                                                                                                  
       0      1      2
0   True  False  False
1  False   True  False
2  False  False   True
3   True  False  False
4  False   True  False
5  False  False   True
6   True  False  False

pd.get_dummies(df['column'], dtype=bool).dtypes                                                                                          
0    bool
1    bool
2    bool
dtype: object

# carbon copy of expected output
dummies = pd.get_dummies(df['column'], dtype=bool)
dummies[:] = np.where(pd.get_dummies(df['column'], dtype=bool), 'true', 'false')  

dummies.add_prefix('column')
  column0 column1 column2
0    true   false   false
1   false    true   false
2   false   false    true
3    true   false   false
4   false    true   false
5   false   false    true
6    true   false   false

答案 1 :(得分:2)

我还将get_dummies用作cs95。但是,我使用str.get_dummies并在column之前加上单词get_dummies。最后,replace

('column'+df.column.astype(str)).str.get_dummies().replace({1:'true', 0:'false'})


Out[2164]:
  column0 column1 column2
0    true   false   false
1   false    true   false
2   false   false    true
3    true   false   false
4   false    true   false
5   false   false    true
6    true   false   false

答案 2 :(得分:1)

factorize和分片分配

i, u = pd.factorize(df.column)

a = np.empty((len(i), len(u)), '<U5')
a.fill('false')
a[np.arange(len(i)), i] = 'true'

pd.DataFrame(a).add_prefix('column')

  column0 column1 column2
0    true   false   false
1   false    true   false
2   false   false    true
3    true   false   false
4   false    true   false
5   false   false    true
6    true   false   false