Python, модифицированная версия одного горячего кодировщика - PullRequest
0 голосов
/ 08 сентября 2018

Мне нужна помощь, чтобы преобразовать уникальные значения из нескольких столбцов, например столбцов 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) назначены столбцам q и s в кадре данных df1, а остальные столбцы равны 0 .

Я мог бы использовать функции melt и dcast в R для достижения этой цели, однако я не уверен, как это сделать в Python.

Спасибо.

1 Ответ

0 голосов
/ 08 сентября 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...