Python,一个热编码器的修改版本

问题描述 投票:0回答:1

我需要帮助将多列中的唯一值(例如列a1和a2)转换为新列,然后将列b1和b2中的值相应地分配给新创建的列。

例如,如果我有一个数据框df如下:

import pandas as pd
import numpy as np
df = pd.DataFrame({'a1':['q','w','e','r'], 'a2':['s','e','q','u'], 'b1':[1,2,3,4], 'b2':[5,6,7,8],})

print(df)
  a1 a2  b1  b2
0  q  s   1   5
1  w  e   2   6
2  e  q   3   7
3  r  u   4   8

列a1和a2的唯一值是['e','q','r','s','u','w']。

np.unique(df.loc[:,['a1','a2']].values)
array(['e', 'q', 'r', 's', 'u', 'w'], dtype=object)

我想将df转换为新的数据框df1,如下所示:

print(df1)
   e  q  r  s  u  w
0  0  1  0  5  0  0
1  6  0  0  0  0  2
2  3  7  0  0  0  0
3  0  0  4  0  8  0

请注意,'q'和's'出现在df的第一行中,因此1(从列b1开始)和5(从列b2)分配给数据帧df1的q和s列,而其他列为0。

我可以在R中使用融合和dcast函数来实现这一点,但是我不知道如何在Python中实现它。

谢谢。

python pandas dataframe
1个回答
1
投票
import pandas as pd
df = pd.DataFrame({'a1':['q','w','e','r'], 'a2':['s','e','q','u'], 'b1':[1,2,3,4], 'b2':[5,6,7,8],})
pd.DataFrame.from_dict([dict(zip(df.iloc[t,:2] , df.iloc[t,2:])) for t in range(len(df))]).fillna(0).astype(int)
    e   q   r   s   u   w
0   0   1   0   5   0   0
1   6   0   0   0   0   2
2   3   7   0   0   0   0
3   0   0   4   0   8   0
© www.soinside.com 2019 - 2024. All rights reserved.