2015-01-30 9 views

Antwort

27

Es ist ziemlich üblich, boolesche Indizierung für diese Art von Aufgabe zu verwenden. Mit dieser Methode finden Sie heraus, wo die Spalte a gleich 1 ist und dann die entsprechenden Zeilen der Spalte b summieren. Sie können loc verwenden, um die Indizierung zu handhaben:

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

Der alternative Ansatz ist groupby zu verwenden, um den Datenrahmen in Teile entsprechend dem Wert in Spalte a aufzuspalten. Sie können dann die einzelnen Teile summieren und den Wert herausziehen, dass die 1'en aufsummiert:

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

Der groupby Ansatz ist viel langsamer als boolean Indizierung, aber ist nützlich, wenn Sie die Summen für andere Werte in Spalte überprüfen möchten a.

+0

Was ist der '.b' Teil? Wie indexieren Sie die Spalten so? – adijo

+0

Sie können auf die Spalte "a" des DataFrame zugreifen, indem Sie 'df ['a']' oder 'df.a' schreiben. Der zweite ist praktisch, funktioniert aber nicht gut, wenn Sie einen Spaltennamen mit mehreren Wörtern wie "person id" haben oder wenn der Spaltenname mit einer DataFrame-Methode wie "where" oder "sum" übereinstimmt. –

+0

Ok danke, auch, wie konvertiere ich alle Werte in der Spalte zu einem 'int' und ermögliche es mir, sie zu summieren? Ich benutzte 'map', um alle in' ints' umzuwandeln, aber ich denke, dass es eine eingebaute Funktion in Pandas geben könnte, um dies effizienter zu machen. – adijo

Verwandte Themen