Преобразование столбца Pandas Dataframe в один ярлык
У меня есть датафрейм панд, похожий на этот:
Col1 ABC
0 XYZ A
1 XYZ B
2 XYZ C
Используя панд get_dummies()
Функция на столбце ABC, я могу получить это:
Col1 A B C
0 XYZ 1 0 0
1 XYZ 0 1 0
2 XYZ 0 0 1
Хотя мне нужно что-то вроде этого, где столбец ABC имеет list / array
тип данных:
Col1 ABC
0 XYZ [1,0,0]
1 XYZ [0,1,0]
2 XYZ [0,0,1]
Я пытался использовать get_dummies
функция, а затем объединение всех столбцов в столбец, который я хотел. Я нашел много ответов, объясняющих, как объединить несколько столбцов в виде строк, например: Объединить два столбца текста в dataframe в pandas / python. Но я не могу найти способ объединить их в список.
Этот вопрос ввел идею использования склеарна OneHotEncoder
, но я не мог заставить его работать. Как горячим образом закодировать один столбец кадра данных Pandas?
Еще одна вещь: у всех ответов, с которыми я столкнулся, были решения, в которых имена столбцов нужно было вводить вручную при их объединении. Есть ли способ использовать Dataframe.iloc()
или механизм объединения для объединения столбцов в список?
4 ответа
Вот пример использования sklearn.preprocessing.LabelBinarizer:
In [361]: from sklearn.preprocessing import LabelBinarizer
In [362]: lb = LabelBinarizer()
In [363]: df['new'] = lb.fit_transform(df['ABC']).tolist()
In [364]: df
Out[364]:
Col1 ABC new
0 XYZ A [1, 0, 0]
1 XYZ B [0, 1, 0]
2 XYZ C [0, 0, 1]
Альтернатива панд:
In [370]: df['new'] = df['ABC'].str.get_dummies().values.tolist()
In [371]: df
Out[371]:
Col1 ABC new
0 XYZ A [1, 0, 0]
1 XYZ B [0, 1, 0]
2 XYZ C [0, 0, 1]
Вы можете просто использовать tolist()
:
df['ABC'] = pd.get_dummies(df.ABC).values.tolist()
Col1 ABC
0 XYZ [1, 0, 0]
1 XYZ [0, 1, 0]
2 XYZ [0, 0, 1]
Если у вас есть pd.DataFrame, как это:
>>> df
Col1 A B C
0 XYZ 1 0 0
1 XYZ 0 1 0
2 XYZ 0 0 1
Вы всегда можете сделать что-то вроде этого:
>>> df.apply(lambda s: list(s[1:]), axis=1)
0 [1, 0, 0]
1 [0, 1, 0]
2 [0, 0, 1]
dtype: object
Обратите внимание, что это по существу цикл for для строк. Обратите внимание, столбцы не имеют list
типы данных, они должны быть object
что сделает ваши операции с фреймами данных не в состоянии воспользоваться преимуществами скорости numpy
,
Если у вас есть фрейм данных df
с категориальной колонкой ABC
тогда вы могли бы использовать для создания нового столбца из горячих векторов
df['new_column'] = list(pandas.get_dummies(df['AB]).get_values())