2016-11-30 4 views
0

Ich habe ein Datum, die wie folgt aussieht: -Pandas Datenrahmen - Summe einer Spalte WRT auf Werte in einer anderen Spalte

data = {"doc1" : {'a': 2 , 'b': 1,'c':3}, "doc2" : {'a': 1 , 'b': 1,'c':3}, "doc3" : {'a': 1 , 'b': 1,'c':3}} 

ich wandle es in einen Datenrahmen: -

df = pd.DataFrame.from_dict(data,orient='index') 

Datenrahmen sieht aus wie dies: -

a c b doc1 2 3 1 doc2 1 3 1 doc3 1 3 1

Jetzt möchte ich alle Werte in Spalte bw zusammenzufassen hier Spalte a-Werte ist 1.

So wird der Wert I 2.

Gibt es eine einfache Möglichkeit, dies sein wollen, werden eher zu tun, als die Spalten durch beide laufen? Ich überprüft andere Beiträge und gefunden this: -

Dies verwendet .loc-Funktion.

Aber aus irgendeinem Grund kann ich nicht scheinen, es mit meinem Datenrahmen zu arbeiten.

Bitte lassen Sie es mich wissen.

Danke.

+2

"Aber aus irgendeinem Grund kann ich nicht mit meinem Datenrahmen arbeiten." Könnten Sie eine detaillierte Beschreibung von "irgendeinem Grund" geben? Die Antwort, die Sie finden, sollte funktionieren. – nanoix9

+0

Hey, ich habe es geschafft mit der folgenden Antwort zu arbeiten. Aber mein Code machte dasselbe. Nur ich vermassele die Variablen. Aufgrund dessen ist es gescheitert. Danke vielmals !! – skyfail

Antwort

1

Sie sind sehr nah dran. Siehe unten.

>>> df[df['a'] == 1]['b'].sum() 
2 

Statt .loc verwenden, versuchen einfach die Datenrahmen (df[df['a'] == 1]) erste Filterung, dann Auswählen der Spalte 'b' und Summieren dann.

Edit: Ich werde dies hier für zukünftige Referenz verlassen, obwohl abhängig von der Version von Pandas, die Sie verwenden, sollte Ihre Lösung arbeiten (danke, @maxymoo). Ich laufe 0.18.1 und beide Ansätze funktionierten.

+1

eigentlich sollte dies dem OP-Code entsprechen ... obwohl es vielleicht nur in der neuesten Version von Pandas ist? – maxymoo

+0

Hmmm. Du hast recht. Ich habe 'Pandas 0.18.1' und seine Lösung funktionierte noch. – blacksite

+0

Hey danke für die schnelle Antwort. Ich habe den Code ausprobiert und es funktioniert gut, aber mein Dataframe ist ziemlich groß mit 10k Spalten und über 2k Zeilen. Ich muss die Summe viele Male berechnen. Wenn ich den obigen Code verwendete, brauchte ich viel Zeit. Jeder schnellere Weg, dies zu tun? – skyfail

Verwandte Themen