новый столбец в pandas DataFrame на основе уникальных значений (списков) существующего столбца - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть фрейм данных, где некоторые ячейки содержат списки нескольких значений. Как я могу создать новые столбцы на основе уникальных значений этих списков? Эти списки могут содержать значения, уже включенные в предыдущие наблюдения, а также могут быть пустыми. Как создать новый столбец (One Hot Encoding) на основе этих значений?

ПРОВЕРИТЬ РЕДАКТИРОВАТЬ - Данные в кавычках:

 data = {'tokens': ['["Spain", "Germany", "England", "Japan"]',
 '["Spain", "Germany"]',
 '["Morocco"]',
 '[]',
 '["Japan"]',
 '[]']} 
my_new_pd = pd.DataFrame(data)

0    ["Spain", "Germany", "England", "Japan"]
1                        ["Spain", "Germany"]
2                                 ["Morocco"]
3                                          []
4                               ["Japan", ""]
5                                          []
Name: tokens, dtype: object

Я хочу что-то вроде

   tokens_Spain|tokens_Germany |tokens_England |tokens_Japan|tokens_Morocco 
0        1              1              1              1           0
1        1              1              0              0           0 
2        0              0              0              0           1
3.       0              0              0              0           0
4.       0              0              1              1           0
5.       0              0              0              0           0

1 Ответ

3 голосов
/ 06 февраля 2020

Первый метод из sklearn, так как у вас уже есть столбец типа списка в вашей dfs

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
yourdf=pd.DataFrame(mlb.fit_transform(df['tokens']),columns=mlb.classes_, index=df.index)

Второй метод: сначала мы делаем explode, затем находим манекены

df['tokens'].explode().str.get_dummies().sum(level=0).add_prefix('tokens_')
   tokens_A  tokens_B  tokens_C  tokens_D  tokens_Z
0         1         1         1         1         0
1         1         1         0         0         0
2         0         0         0         0         1
3         0         0         0         0         0
4         0         0         0         1         1
5         0         0         0         0         0

Метод три вида "взорваться" на оси = 0

pd.get_dummies(pd.DataFrame(df.tokens.tolist()),prefix='tokens',prefix_sep='_').sum(level=0,axis=1)
   tokens_A  tokens_D  tokens_Z  tokens_B  tokens_C
0         1         1         0         1         1
1         1         0         0         1         0
2         0         0         1         0         0
3         0         0         0         0         0
4         0         1         1         0         0
5         0         0         0         0         0

Обновление

df['tokens'].explode().str.get_dummies().sum(level=0).add_prefix('tokens_')
   tokens_England  tokens_Germany  tokens_Japan  tokens_Morocco  tokens_Spain
0               1               1             1               0             1
1               0               1             0               0             1
2               0               0             0               1             0
3               0               0             0               0             0
4               1               0             1               0             0
5               0               0             0               0             0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...