2017-08-24 1 views
1

Wenn ich den folgenden Code:Pandas GroupBy Summe verkettet Zahlen anstatt sie Summieren

print(self.df.groupby(by=[2])[3].agg(['sum'])) 

Am folgenden Datenrahmen:

  0 1  2  3  4  5  6  7 
0   15 LCU Test 1 308.02 170703 ALCU 4868 MS10 
1   16 LCU Test 2 127.37 170703 ALCU 4868 MS10 

Die Summenfunktion nicht richtig abgeschlossen ist, da der Wert Spalte (Spalte 3) gibt eine verkettete Zeichenfolge der Werte (308.02127.37) zurück, anstatt die Integrität der einzelnen Werte beizubehalten, um die Operation zu ermöglichen.

+1

kann das Verhalten nicht reproduzieren Sie erwähnt. Außerdem erhalte ich Fehler bei der Verwendung von Ihnen Code (nach dem Entfernen der Selbst-Teil) – Quickbeam2k1

+1

Scheint wie Ihre Spalte 3 Typ ist eine Zeichenfolge anstelle eines Floats, versuchen Sie es – Deb

+0

Es wird viel besser sein, wenn Sie mehr Zeilen des Dataframes groupby verwenden . – Dark

Antwort

3

Ihre dritte Spalte scheint eine Zeichenfolge zu sein. Haben Sie Ihren Datenrahmen mit dtype=str geladen?

Versuchen Sie außerdem, Ihre Spalten nicht fest zu codieren. Sie können .astype oder pd.to_numeric verwenden zu werfen und dann gelten sum:

self.df.groupby(self.df.columns[2])[self.df.columns[3]]\ 
     .agg(lambda x: pd.to_numeric(x, errors='coerce').sum()) 

Oder

self.df.groupby(self.df.columns[2])[self.df.columns[3]]\ 
     .agg(lambda x: x.astype(float).sum()) 
+1

Danke. Ich habe das anders gemacht, werde aber jede Option ausprobieren, um zu sehen, was am besten funktioniert. Das Problem war, dass die Spalte nicht numerisch war. – RGETLB