2017-09-15 2 views
1

Wie summiere ich mehrere Spalten (z. B. Spalten C4, C5 und C6) unter Verwendung jedes eindeutigen Eintrags in einer anderen Spalte (z. B. nach Spalte C2).Python: Summe mehrerer Spalten in einem Datenrahmen durch jeden eindeutigen Zeileneintrag in einer anderen Spalte

Zum Beispiel möchte ich einen neuen Datenrahmen erstellen, der Spalte C2 durch Import und Export zusammenbrechen und auch die Summe von C4, C5 und C6 anzeigen würde (und vorzugsweise die anderen Spalten C1 und C3 fallen lassen).

Sample Table

+1

Bitte geben Sie einen Beispielcode, der Sie –

+0

versucht habe ich das Problem vereinfacht weil mein tatsächlicher Datensatz zu groß ist, aber wenn xdata mein Datenrahmen ist, habe ich ydata = xdata.sum (axis = 0) verwendet, um eine Summe jeder Spalte und dann esse zu erhalten ursprünglich verwendet YDATA [C4:], um die Gesamtsumme zu isolieren, aber offensichtlich nicht die Fähigkeit, durch bestimmte Zeileneinträge in den Spalten C1, C2 oder C3 summiert – KSQ

Antwort

0

Sie können dies die groupby Funktion Pandas mit tun

df = pd.DataFrame([['A', 'Import', 'Argentina', 1, 1, 1], 
        ['B', 'Import', 'Brazil', 2, 2, 2], 
        ['C', 'Export', 'UJ', 3, 3, 3], 
        ['D', 'Export', 'US', 4, 4, 4], 
        ['A', 'Export', 'Canada', 5, 5, 5], 
        ['B', 'Export', 'Russia', 6, 6, 6], 
        ['C', 'Import', 'China', 7, 7, 7], 
        ['D', 'Import', 'India', 8, 8, 8]], 
        columns=['C1', 'C2', 'C3', 'C4', 'C5', 'C6']) 

results = df.groupby("C2").sum() 

print(results) 

Welche wird Ihnen

 C4 C5 C6 
C2     
Export 18 18 18 
Import 18 18 18 
+0

Dank, das ist sehr hilfreich, genau das, was ich fehlte. Gibt es eine bessere Möglichkeit, vorherige unerwünschte Spalten zu ignorieren, als einen neuen Datenrahmen zu erstellen, der lautet: result [C4:] – KSQ

+0

@KSQ pandas neigt dazu, neue Kopien des Datenrahmens zu erstellen, wenn Änderungen vorgenommen werden, einige Funktionen haben einen 'inplace' Option, um keine neue Kopie zu erstellen. Um beispielsweise Come-Spalten zu löschen, könnten Sie 'df.drop (['C1', 'C2', C3 '], Achse = 1, Inplace = True)' machen, was nur die letzten paar Spalten zurückgibt und kein a erzeugt Kopieren. –

+0

Ich sehe, danke Ken, das war sehr hilfreich – KSQ

Verwandte Themen