2016-08-02 2 views
2

У меня есть следующий файл CSV: https://github.com/antonio1695/Python/blob/master/nearBPO/facturas.csvPivot с пандой Python, чтобы получить булевы

Из которого я создал dataframe со следующим кодом:

import pandas as pd 
df = pd.read_csv("C:/Users/Antonio/Desktop/nearBPO/facturas.csv", encoding = "ISO-8859-1") 
df_du = df.iloc[:,[0,5]] 
dfv = df_du.groupby('UUID')['Desc'].apply(list) 
df2 = dfv.reset_index() 

* Примечание: Я забираю CSV локально.

Что после того, как код выглядит следующим образом:

UUID          Desc 
0 0019A60D-78F8-E341-8D3E-9786201FE017 [TRANSPORTACION DE PASAJEROS] 
1 003B8B8F-7017-E441-8C84-8C0EA577E29D [SERVICIO POR HORA] 
2 00536BC1-1B10-4146-A59B-36613090EF10 [CONSUMO Y RENTA DE SALA DE JUNTAS] 
3 005BBAEE-ABEC-E341-8CED-15DA22D11F65 [VERIFICACION HOLOGRAMA DOBLE CERO] 
4 006C5F2E-CAE0-4498-9288-0241C1949D8A [C Meg XT Clas CH, Com Whop Q CH, C Meg XT Cla... 
5 0075D1FC-996D-4784-9755-2F4598D16163 [Consumo] 

Я хотел бы сделать dataframe, который имел каждый элемент в столбце «Desc» в качестве столбца и каждой UUID в качестве строки, где я бы 1 (или True), если UUID имел соответствующее «Desc» в нем.

Пример того, что я хочу:

UUID          Transportacion de pasajeros Servicio por hora 
0019A60D-78F8-E341-8D3E-9786201FE017  1        0 
003B8B8F-7017-E441-8C84-8C0EA577E29D  0        1 

То, что я пытался было сделать было матрица 0 с, если сделать 1-х. Впоследствии я бы слил его и повернул. Однако, поскольку некоторые «Desc» одинаковы, я не знал, насколько я должен это делать. И, похоже, он встречается со многими другими недостатками в части слияния.

+1

Вы можете попробовать это 'df2 [ 'Desc'] str.join ('___') str.get_dummies ('___') ' – ayhan

+0

Я получаю столбцы, но у меня нет UUID в качестве ссылки. Кроме того, я не видел никаких 1. Возможно, просто потому, что я не видел всю базу, я буду экспортировать ее для поиска 1. @ayhan –

ответ

3

Вы можете использовать

pd.concat([df2['UUID'], df2['Desc'].str.join('___').str.get_dummies('___')], axis=1) 

возвращает что-то вроде этого:..

Out: 
            UUID SERVICIO POR HORA \ 
0 0019A60D-78F8-E341-8D3E-9786201FE017     0 
1 003B8B8F-7017-E441-8C84-8C0EA577E29D     1 

    TRANSPORTACION DE PASAJEROS 
0       1 
1       0 
+0

Это сработало, спасибо! Хотя требуется некоторое время. Это нормально? Или есть более быстрый способ? Потому что потом я делаю это с чем-то вроде 1000 раз больше lol. –

+1

@ AntonioLοpezRuiz На этапе groupby вы можете использовать 'df_du.groupby ('UUID') ['Desc']. Apply ('___'. Join)' и в конце вы можете использовать 'pd.concat ([df2 [' UUID '], df2 [' Desc ']. Str.get_dummies (' ___ ')], axis = 1) '. Не уверен, что это значительно сократит время. – ayhan

Смежные вопросы