Pandas, python: как быстро кодировать столбец, содержащий массив строк - PullRequest
0 голосов
/ 25 октября 2018

Мне интересно, как в горячем виде кодировать столбец, содержащий массив строк.

Я пытаюсь перейти от df к df2:

import pandas as pd

# This is the original data frame
df = pd.DataFrame({'menu': [['Italian', 'Greek'], ['Japanese'],
                   ['Italian','Greek', 'Japanese']], 'price': ['$$', '$$', '$']})

df.head()

# This is the desired result

df2 = pd.DataFrame({'menu': [['Italian', 'Greek'], ['Japanese'], 
['Italian','Greek', 'Japanese']], 
                    'price': ['$$', '$$', '$'], 
                    'Italian': [1,0,1],
                    'Greek': [1,0,1],
                    'Japanese': [0,1,1]
                   })
df2.head()

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете использовать pd.get_dummies, pd.apply, DataFrame.join и Series.stack

df.join(pd.get_dummies(df.menu.apply(pd.Series).stack()).sum(level=0))

Выход:

                         menu price  Greek  Italian  Japanese
0            [Italian, Greek]    $$      1        1         0
1                  [Japanese]    $$      0        0         1
2  [Italian, Greek, Japanese]     $      1        1         1
0 голосов
/ 25 октября 2018

Использование MultiLabelBinarizer с join:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = df.join(pd.DataFrame(mlb.fit_transform(df['menu']),columns=mlb.classes_))
print (df)
                         menu price  Greek  Italian  Japanese
0            [Italian, Greek]    $$      1        1         0
1                  [Japanese]    $$      0        0         1
2  [Italian, Greek, Japanese]     $      1        1         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...