2017-12-20 38 views
1

Ich habe einen solchen Datenrahmen:Wie zählen Sie die eindeutigen Werte jeder Zeile in einer Spalte mit Python?

id countries 
01 [UK,UK,UK,US] 
02 [US,US,US,US] 
03 [FR,UK,CN,US] 

Ich möchte, wie viele Länder für jede ID existieren zählen. Wie sollte das Ergebnis wie:

id countries counts 
01 [UK,UK,UK,US] 2 
02 [US,US,US,US] 1 
03 [FR,UK,CN,US] 4 
+0

Warum Pakete importieren, wenn sie nicht verwendet werden? –

+0

@GarbageCollector um ... meine Schuld, es ist für andere verwendet. Ich werde es löschen. Danke. – Jess

Antwort

2

Wenn Werte sind list s sie set konvertieren und erhalten length:

print (type(df.loc[0, 'countries'])) 
<class 'list'> 

df['counts'] = df['countries'].apply(lambda x: len(set(x))) 
print (df) 
    id   countries counts 
0 1 [UK, UK, UK, US]  2 
1 2 [US, US, US, US]  1 
2 3 [FR, UK, CN, US]  4 

Oder wenn Werte strings sind erste [] und Spaltung entfernen:

print (type(df.loc[0, 'countries'])) 
<class 'str'> 

df['counts'] = df['countries'].str.strip('[]').str.split(',').apply(lambda x: len(set(x))) 
print (df) 
    id  countries counts 
0 1 [UK,UK,UK,US]  2 
1 2 [US,US,US,US]  1 
2 3 [FR,UK,CN,US]  4 
Verwandte Themen