#python #pandas #scikit-learn
#python #pandas #scikit-learn
Вопрос:
Я никогда раньше этого не делал — и, возможно, есть более простой способ сделать это.
У меня есть df, подобный этому:
parent_org_name ( MA,) (MAR,) (ART,) (RTI,) (TIN,)
0 MARTINS NaN NaN NaN NaN NaN
1 111 SOUTH NaN NaN NaN NaN NaN
2 247 CUST NaN NaN NaN NaN NaN
3 3M NaN NaN NaN NaN NaN
4 A. K. ENT NaN NaN NaN NaN NaN
Который я создал вручную. Изначально я начал с 2 фреймов данных:
1: df1
только с parent_org_name
единственным столбцом
#df1
parent_org_name
0 MARTINS
1 111 SOUTH
2 247 CUSTOMER PVT. LTD.
3 3M
4 A. K. ENTERPRISE
2: df2
со всеми именами столбцов ( MA, MAR, ART и т.д.) В одном списке в одном столбце в одной строке
#df2
parent_trigram
0 [ MA, MAR, ART, RTI, TIN]
Я пытаюсь упорядочить столбцы в алфавитном порядке, а затем одно горячее кодирование этого df
, чтобы сказать:
if column name in df isin parent_org_name then 1 else 0
Итак, это результат, который я ищу:
parent_org_name ( MA,) (ART,) (MAR,) (RTI,) (TIN,)
0 MARTINS 1 1 1 1 1
1 111 SOUTH 0 0 0 0 0
2 247 CUST 0 0 0 0 0
3 3M 0 0 0 0 0
4 A. K. ENT 0 0 0 0 0
Конечная цель — объединить каждую из этих строк в столбец списков, а затем использовать этот столбец в моделях ml.
Комментарии:
1. Это str.содержит
2. не уверен, помогает ли это, но
sklearn.preprocessing.OneHotEncoder
— документация
Ответ №1:
df = pd.DataFrame({
'parent_org_name' : [" MARTINS", "111 SOUTH", "247 CUST", "3M", "A. K. ENT"]
})
for c in [' MA', 'MAR', 'ART', 'RTI', 'TIN']:
df[c] = df['parent_org_name'].apply(lambda x: int(c in x))
print (df)
Вывод
parent_org_name MA MAR ART RTI TIN
0 MARTINS 1 1 1 1 1
1 111 SOUTH 0 0 0 0 0
2 247 CUST 0 0 0 0 0
3 3M 0 0 0 0 0
4 A. K. ENT 0 0 0 0 0