2017-07-25 4 views
0

Ich habe ein Datenframe der folgenden Struktur, die für diese Frage vereinfacht ist.Gruppieren Sie Zeilen nach Datum und überschreiben NaN-Werte

A   B C D E 
0 2014/01/01 nan nan 0.2 nan 
1 2014/01/01 0.1 nan nan nan 
2 2014/01/01 nan 0.3 nan 0.7 
3 2014/01/02 nan 0.4 nan nan 
4 2014/01/02 0.5 nan 0.6 0.8 

Was ich hier habe, ist eine Reihe von Lesungen über mehrere Zeitstempel an einzelnen Tagen. Die Spalten B, C, D und E repräsentieren verschiedene Orte. Die Daten, die ich einlese, sind so eingerichtet, dass sie zu einem bestimmten Zeitstempel Daten von bestimmten Orten aufnehmen und Nan Werte für die anderen Orte ausfüllen.

Was ich tun möchte, ist die Daten nach Zeitstempel gruppieren, die ich leicht mit einem .GroupBy() Befehl ausführen kann. Von dort möchte ich, dass die Nan-Werte in den gruppierten Daten mit den gültigen Werten in späteren Reihen überschrieben werden, so dass das folgende Ergebnis erhalten wird.

A   B C D E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 

Wie gehe ich vor?

Antwort

6

Versuchen df.groupby mit DataFrameGroupBy.agg: (! Dank MAXU)

In [528]: df.groupby('A', as_index=False, sort=False).agg(np.nansum) 
Out[528]: 
      A B C D E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 

Eine kürzere Version mit DataFrameGroupBy.sum:

In [537]: df.groupby('A', as_index=False, sort=False).sum() 
Out[537]: 
      A B C D E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 
+2

warum brauchen wir 'np.nansum'? 'df.groupby ('A', as_index = False, sort = False) .sum()' - sollte den Trick machen ... – MaxU

+1

@MaxU Brilliant. War nicht sicher, dass sum() Nans berücksichtigte. Ich lerne immer noch so willkommen Ihre Kommentare :) –

+1

Ausgezeichnete Antwort. Link zu Pandas docs hier: https://pandas.pydata.org/pandas-docs/stable/groupby.html#groupby-sorting –

1

Sie dies versuchen können pandasfirst

df.groupby('A', as_index=False).first() 


      A B C D E 
0 1/1/2014 0.1 0.3 0.2 0.7 
1 1/2/2014 0.5 0.4 0.6 0.8 
unter Verwendung
+0

Nice one ...! +1 –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ +1 für Sie auch ~ – Wen

Verwandte Themen