2015-01-30 9 views

risposta

27

È piuttosto comune utilizzare l'indicizzazione booleana per questo tipo di attività. Con questo metodo, si scopre dove la colonna a è uguale a 1 e quindi somma le righe corrispondenti della colonna b. È possibile utilizzare loc per gestire l'indicizzazione:

>>> df.loc[df['a'] == 1, 'b'].sum() 
15 

L'approccio alternativo consiste nell'utilizzare groupby dividere il dataframe in parti in base al valore della colonna a. È quindi possibile sommare ogni parte e tirare fuori il valore che l'1 del aggiunti fino a:

>>> df.groupby('a')['b'].sum()[1] 
15 

L'approccio groupby è molto più lento rispetto all'utilizzo di indicizzazione booleana, ma è utile se si desidera controllare le somme per altri valori nella colonna a.

+0

Che cos'è la parte '.b'? Come stai indicizzando le colonne in questo modo? – adijo

+0

È possibile accedere alla colonna 'a' di DataFrame scrivendo' df ['a'] 'o' df.a'. Il secondo è conveniente ma non funziona bene se si ha un nome di colonna con più parole come "id person" o se il nome della colonna coincide con un metodo DataFrame come "where" o "sum". –

+0

Ok grazie, anche come faccio a convertire tutti i valori nella colonna in un 'int', permettendomi di sommarli? Stavo usando 'map' per convertirli tutti in' ints', ma penso che ci potrebbe essere una funzione incorporata nei panda per farlo in modo più efficiente. – adijo

Problemi correlati