Создать фиктивную переменную из нескольких столбцов с помощью Python - PullRequest
3 голосов
/ 15 марта 2019

Я работаю с фреймом данных, содержащим два столбца с идентификационными номерами.Для дальнейшего исследования я хочу сделать своего рода фиктивные переменные этих идентификационных номеров (с двумя идентификационными номерами).Мой код, однако, не объединяет столбцы из двух фреймов данных.Как объединить столбцы из двух фреймов данных и создать фиктивные переменные?

Фрейм данных

import pandas as pd
import numpy as np
d = {'ID1': [1,2,3], 'ID2': [2,3,4]}
df = pd.DataFrame(data=d)

Текущий код

pd.get_dummies(df, prefix = ['ID1', 'ID2'], columns=['ID1', 'ID2'])

Желаемый выход

p = {'1': [1,0,0], '2': [1,1,0], '3': [0,1,1], '4': [0,0,1]}
df2 = pd.DataFrame(data=p)
df2

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Если нужны индикаторы в выходных данных, используйте max, если нужны значения счетчика, используйте sum после get_dummies с другими параметрами и приведением значений к строкам:

df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').max(level=0, axis=1)
#count alternative 
#df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').sum(level=0, axis=1)
print (df)
   1  2  3  4
0  1  1  0  0
1  0  1  1  0
2  0  0  1  1
2 голосов
/ 15 марта 2019

Различные способы снятия шкуры с кошки;вот как я это сделаю - используйте дополнительный groupby:

# pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).sum()
pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).max()

   1  2  3  4
0  1  1  0  0
1  0  1  1  0
2  0  0  1  1

Другой вариант - stack ing, если вам нравится краткость:

# pd.get_dummies(df.stack()).sum(level=0)
pd.get_dummies(df.stack()).max(level=0)

   1  2  3  4
0  1  1  0  0
1  0  1  1  0
2  0  0  1  1
...