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

标签 python pandas

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

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  

关于python - 一种热编码 - 将多列编码为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669165/

相关文章:

python - 每次在 Python 中运行代码时,如何以相同的顺序随机化 pandas 列?

python - 如何将多个 QPushButton 添加到 QTableView?

python - NUMPY 操作 : Memory Efficiency: PYTHON

python - 按多级类别分组,返回每个类别中n个最大的和(每个类别的n不同)

python - 如何迭代两个不同大小的数据帧?

python - 带有 "Wide"数据的 Pandas groupby

python - 系统服务音频输出

python - 在切片中,为什么我不能反转列表,跳过单个括号中的最后一项?

python - 如何使用python在不影响相应行的情况下用空白交换行中的重复项?

python - Pandas 按时间分组,指定开始时间(非整数分钟)