繁体   English   中英

一种热编码 - 将多列编码为一

[英]One hot encoding - encode multiple columns as one

我想对具有多个相同“类型”列的数据帧进行编码,例如:

import pandas as pd

df = pd.DataFrame(data=[["France", "Bupapest", "Sweden", "Paris"], ["Italy", "Frankfurt", "France", "Naples"]], columns=["Countries 1", "Cities 1", "Countries 2", "Cities 2"])
print(df)

输出:

  Countries 1   Cities 1 Countries 2 Cities 2
0      France   Bupapest      Sweden    Paris
1       Italy  Frankfurt      France   Naples

如何通过传入应该被视为一个的列索引来使用一种热编码对这个数据帧进行编码? 在这个例子中,我会传入 [0, 2] 和 [1, 3] 因为国家 1 和国家 2 列有 3 个不同的国家,因此应该有 3 个类别,而不是每个类别 2 个,同样的原则适用于两个国家列。

我使用wide_to_long压平 df ,然后使用factorize + unstack

s=pd.wide_to_long(df.reset_index(),stubnames=['Countries','Cities'],i='index',j='unstack',sep=' ').apply(lambda x : pd.factorize(x)[0]+1).unstack()

s.columns=s.columns.map('{0[0]} {0[1]}'.format)

s=s.reindex(columns=df.columns)
s
Out[1377]: 
       Countries 1  Cities 1  Countries 2  Cities 2
index                                              
0                1         1            3         3
1                2         2            1         4

或 get_dummies

s=pd.get_dummies(pd.wide_to_long(df.reset_index(),stubnames=['Countries','Cities'],i='index',j='unstack',sep=' '))

s
Out[1392]: 
               Countries_France  Countries_Italy  Countries_Sweden  \
index unstack                                                        
0     1                       1                0                 0   
1     1                       0                1                 0   
0     2                       0                0                 1   
1     2                       1                0                 0   
               Cities_Bupapest  Cities_Frankfurt  Cities_Naples  Cities_Paris  
index unstack                                                                  
0     1                      1                 0              0             0  
1     1                      0                 1              0             0  
0     2                      0                 0              0             1  
1     2                      0                 0              1             0  

暂无
暂无

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

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