2017-08-23 5 views
0

ich den DatenrahmenKombination Reihen in Pandas Datenrahmen

Date   CUSIP Asset Liability 
01-01-1990  A  1  NaN 
01-01-1990  A  Nan  2 
02-01-1990  A  3   2 
01-01-1990  B  Nan  2 
01-01-1990  B  1   2 

Gibt es trotzdem zu kombinieren diese haben, so dass es zu:

Date   CUSIP Asset Liability 
01-01-1990  A  1   2 
02-01-1990  A  3   2 
01-01-1990  B  1   2 

Die Art und Weise kam ich mit ist groupby zu verwenden ([ "CUSIP", Datum]). agg (Funktion)

wo ich eine Funktion anzuwenden, wenn die max (nan, 3) = 3.

I Gibt es einen einfacheren Weg?

Antwort

1
>>> df.groupby(['Date', 'CUSIP']).apply(lambda group: group.ffill().bfill()).drop_duplicates() 
     Date CUSIP Asset Liability 
0 01-01-1990  A  1   2 
2 02-01-1990  A  3   2 
3 01-01-1990  B  1   2 
+0

ja! Das Problem bei der Implementierung einer Max-mit-Nan-Methode ist, dass dies dumm langsam ist. Man muss eine Liste durchlaufen und Nan Werte verwerfen. Manchmal hasse ich die Art und Weise, wie Python ... – Lost1

+0

Um sicherzustellen, dass Ihre Daten nicht fehlerhaft sind, können Sie auch sicherstellen, dass es nur ein CUSIP an einem bestimmten Datum gibt. Unter der Annahme, dass das Ergebnis "result" heißt, muss "result.groupby (['Date', 'CUSIP']) ['CUSIP']. Count(). Max()' 1 zurückgeben. – Alexander

+0

danke für den Tipp. Ich renne das. Das ist sehr langsam. sind Vorwärtsfüllung und Rückwärtsfüllung immer so langsam? – Lost1

Verwandte Themen