Преобразование кадра данных панд для использования в MultiLabelBinarizer - PullRequest
0 голосов
/ 27 ноября 2018

У меня такой вопрос: как я могу преобразовать фрейм данных таким образом, чтобы в конечном итоге использовать его в MulitLabelBinarizer Scikit:

d1 = {'ID':[1,2,3,4], 'km':[80,90,90,100], 'weight':[10,20,20,30], 'label':['A','B','C','D','E']}
df1 = pd.DataFrame(data=d1)
df1

    ID  km  weight label
0   1   80      10     A
1   2   90      20     B
2   2   90      20     C
3   4  100      30     D

Он должен работать так:

d2 ={'km':[80,90,100], 'weight':[10,20,30], 'label':['A',('B','C'),'D']}
df2 = pd.DataFrame(data=d2)
df2

    km  weight   label
0   80      10       A
1   90      20  (B, C)
2  100      30       D

ТакЯ могу правильно использовать данные в MultiLabelBinarizer:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
mlb.fit(df2['label'])
mlb.transform(df2['label'])

array([[1, 0, 0, 0],
       [0, 1, 1, 0],
       [0, 0, 0, 1]])

Примечание: необработанные данные имеют более 1 миллиона строк.

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, вам нужно это:

d1 = {'ID':[1,2,3,4], 'km':[80,90,90,100], 'weight':[10,20,20,30], 'label':['A','B','C','D']}
df1 = pd.DataFrame(data=d1)
#Groupby and get tuple, like you need 
df2 = pd.DataFrame(df1.groupby(['km','weight'])['label'].apply(lambda x: tuple(x.values)))
df2.reset_index(inplace=True)

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
mlb.fit(df2['label'])
mlb.transform(df2['label'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...