Как сделать бинарную матрицу панд со словами в списке? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть фрейм данных со столбцом, который содержит список в каждой строке:

df['list1'][0] = ['a','b','c','d']

df['list1'][1] = [,'b','c','d', 'e']

Теперь я хочу сделать из этого двоичную матрицу с буквами в качестве имен столбцов и 1, если списокв этой строке содержится буква, и если не 0. Я не могу найти решение для этого.Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 06 мая 2019

Используйте MultiLabelBinarizer , если важна производительность: :

df = pd.DataFrame({'list1':[ ['a','b','c','d'], ['b','c','d', 'e']]})
print (df)
          list1
0  [a, b, c, d]
1  [b, c, d, e]

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df1 = pd.DataFrame(mlb.fit_transform(df['list1']),columns=mlb.classes_)

Или get_dummies с DataFrame конструктором:

df1 = (pd.get_dummies(pd.DataFrame(df['list1'].values.tolist()), prefix_sep='', prefix='')
         .max(level=0, axis=1))

Другое решение, но медленное, если используются большие данные Series.str.join с Series.str.get_dummies:

df1 = df['list1'].str.join('|').str.get_dummies()

print (df1)
   a  b  c  d  e
0  1  1  1  1  0
1  0  1  1  1  1

РЕДАКТИРОВАТЬ: Если нужны исходные столбцы с удаленным list1 столбцом, используйте DataFrame.pop для извлечения столбца с DataFrame.join:

df = pd.DataFrame({'list1':[ ['a','b','c','d'], ['b','c','d', 'e']],
                   'col1':[1,2],
                   'col2':list('XY')})
print (df)
          list1  col1 col2
0  [a, b, c, d]     1    X
1  [b, c, d, e]     2    Y

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df1 = pd.DataFrame(mlb.fit_transform(df.pop('list1')),columns=mlb.classes_, index=df.index)
print (df1)
   a  b  c  d  e
0  1  1  1  1  0
1  0  1  1  1  1

df1 = (pd.get_dummies(pd.DataFrame(df.pop('list1').values.tolist()), prefix_sep='', prefix='')
         .max(level=0, axis=1))

df1 = df.pop('list1').str.join('|').str.get_dummies()

df = df.join(df1)
print (df)
   col1 col2  a  b  c  d  e
0     1    X  1  1  1  1  0
1     2    Y  0  1  1  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...