2016-09-14 3 views
2

j'ai données marquées que je besoin d'appliquer un chaud encodage: '786.2', 'ICD-9-CM|786.2', 'ICD-9-CM', '786.2b|V13.02', 'V13.02', '279.12', 'ICD-9-CM|V42.81' est des étiquettes. Le | signifie que le document a deux étiquettes en même temps. J'ai donc écrit le code comme ceci:get_dummies divisé caractère

labels = np.asarray(label_docs) 

labels = np.array([u'786.2', u'ICD-9-CM|786.2', u'|ICD-9-CM', u'786.2b|V13.02', u'V13.02', u'279.12', u'ICD-9-CM|V42.81|']) 

df = pd.DataFrame(labels, columns=['label']) 
labels = df['label'].str.get_dummies(sep='|') 

et le résultat:

279.12 786.2 786.2b ICD-9-CM V13.02 V42.81 
0  0  1  0   0  0  0 
1  0  1  0   1  0  0 
2  0  0  0   1  0  0 
3  0  0  1   0  1  0 
4  0  0  0   0  1  0 
5  1  0  0   0  0  0 
6  0  0  0   1  0  1 

Cependant, maintenant je veux seulement 1 étiquette pour chaque document:

'ICD-9-CM|786.2' est 'ICD-9-CM',

'ICD-9-CM|V42.81|' est 'ICD-9-CM'.

Comment est-ce que je pourrais faire séparément par get_dummies comme cela?

Répondre

4

Je pense que vous avez besoin str.strip et str.split puis sélectionnez premier élément de la liste par str[0]:

print (df.label.str.strip('|').str.split('|').str[0]) 
0  786.2 
1 ICD-9-CM 
2 ICD-9-CM 
3  786.2b 
4  V13.02 
5  279.12 
6 ICD-9-CM 
Name: label, dtype: object 

labels = df.label.str.strip('|').str.split('|').str[0].str.get_dummies() 
print (labels) 
    279.12 786.2 786.2b ICD-9-CM V13.02 
0  0  1  0   0  0 
1  0  0  0   1  0 
2  0  0  0   1  0 
3  0  0  1   0  0 
4  0  0  0   0  1 
5  1  0  0   0  0 
6  0  0  0   1  0 

Si la ligne avec l'index 2 besoin d'aucune valeur, supprimer str.strip:

print (df.label.str.split('|').str[0]) 
0  786.2 
1 ICD-9-CM 
2    
3  786.2b 
4  V13.02 
5  279.12 
6 ICD-9-CM 
Name: label, dtype: object 

labels = df.label.str.split('|').str[0].str.get_dummies(sep='|') 
print (labels) 

    279.12 786.2 786.2b ICD-9-CM V13.02 
0  0  1  0   0  0 
1  0  0  0   1  0 
2  0  0  0   0  0 
3  0  0  1   0  0 
4  0  0  0   0  1 
5  1  0  0   0  0 
6  0  0  0   1  0 
+0

Oui, vous ont raison. – jezrael

+0

@piRSquared - Merci. – jezrael

+0

Votre réponse est géniale – ngoduyvu