2017-09-04 1 views
1

Ich habe die folgenden Daten-Set:Summe und groupby nicht für mich arbeiten Pandas mit

enter image description here

Ich möchte von nombre (Name) Gruppierungsspalte cantidad (Betrag) summieren Pandas verwenden, so habe ich versucht, : enter image description here

Erste Reihe war überrascht wegen "Ana" ist ein gebräuchlicher Name, so dass ich geprüft: enter image description here

Ok, also ... die Summe für "Ana" ist 434 nicht 1. Was passiert? Was mache ich falsch?

+0

Wirklich interessant. Was gibt es? Resume = historical_names.groupby ('nombre') ['cantidad']. Sum() '? – jezrael

+0

@jezrael, danke für Ihr Interesse. Das Ergebnis ist das gleiche. Sie können den Datensatz von [hier] herunterladen (http://datos.gob.ar/dataset/b8418d41-8e0c-4e85-8aa8-80d51a840132/resource/811bf426-fc36-4f20-b2e1-59bdbb938153/download/nombres-1920- 1924.csv) –

+0

@JohnGalt Ich werde hinzufügen, wenn ich zu mir nach Hause komme. Ich habe dtypes überprüft und ich bekomme Objekt (nombre), np.int64 (Cantidad) und np.int64 (anio) –

Antwort

2

Sie müssen skipinitialspace=True da die Werte in Spalte nombre hat Leerzeichen Hinter - so 'Ana', ' Ana', ' Ana ' ... separat gruppiert:

historical_names = pd.read_csv('nombres-1920-1924.csv', skipinitialspace =True) 
print (historical_names.head()) 

resume = historical_names.groupby('nombre')['cantidad'].sum() 
print (resume['Ana']) 
437 

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad'] 
print (a) 
5  113 
10340 138 
18776  1 
23114 183 
26523  2 
Name: cantidad, dtype: int64 

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad'].sum() 
print (a) 
437 

historical_names = pd.read_csv('nombres-1920-1924.csv') 
print (historical_names.head()) 

historical_names['nombre'] = historical_names['nombre'].str.strip() 
resume = historical_names.groupby('nombre')['cantidad'].sum() 
print (resume['Ana']) 
437 

historical_names = pd.read_csv('nombres-1920-1924.csv') 
print (historical_names.head()) 

resume = historical_names.groupby('nombre')['cantidad'].sum() 
print (resume['Ana']) 
434 

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad'] 
print (a) 
5  113 
10340 138 
23114 183 
Name: cantidad, dtype: int64 

a = historical_names.loc[historical_names['nombre'] == 'Ana', 'cantidad'].sum() 
print (a) 
434 
+0

Wie üblich, sehr schnell. 'Ich kam mit historical_names.nombre = historical_names.nombre.apply (Lambda X: X.Strip())' Hätten Sie irgendwelche Einblicke zu teilen, die sich auf den Unterschied in der Leistung von diesem 'apply' und' .str.strip () '? – Uvar

+1

@Uvar - Es gibt Unterschiede Behandlung 'NaN' '' str.strip() 'Handle' NaN's, aber 'apply (Lambda x: x.strip())' nicht. – jezrael