简体   繁体   English

熊猫从列中获得一个热门编码作为布尔值

[英]Pandas get one hot encodings from a column as booleans

I'm considering a Pandas Dataframe. 我在考虑一个Pandas Dataframe。 I would like to find an efficient way in which the second Dataframe is created. 我想找到一种有效的方法来创建第二个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

This is a get_dummies problem, but you will additionally need to specify dtype=bool to get columns of bools: 这是一个get_dummies问题,但您还需要指定dtype=bool来获取get_dummies列:

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

I also use get_dummies as cs95. 我也使用get_dummies作为cs95。 However, I use str.get_dummies and concat the word column before get_dummies . 但是,我使用str.get_dummies并在get_dummies之前get_dummies单词column Finally, replace 最后, 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

factorize and slice assignment 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM