Einige meiner Daten wie folgt aussehen:Python Pandas - Verschmelzung meist dupliziert Reihen
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35
Ich versuche, auf den Punkt zu kommen, wo ich
data.set_index(['date', 'name'])
Aber mit den Daten ausgeführt werden kann als - Es gibt natürlich Duplikate (wie oben gezeigt), also kann ich das nicht tun (und ich will keinen Index mit Duplikaten, und ich kann nicht einfach drop_duplicates(), da dies Daten verlieren würde).
Ich würde gerne in der Lage sein, Zeilen, die die gleichen [Datum, Name] -Werte in einer einzigen Zeile haben, zu erzwingen, wenn sie erfolgreich konvergiert werden können basierend auf bestimmten Werten NaN (ähnlich dem Verhalten von combine_first()) . Zum Beispiel bei
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35
die oben enden würde Wenn zwei Werte unterschiedlich sind und man ist nicht NaN, die beiden Reihen nicht konvergiert werden soll (dies ist wahrscheinlich ein Fehler wäre, die ich brauchen würde, auf Follow-up).
(auf das obige Beispiel erstrecken, besteht in der Tat eine beliebige Anzahl von Zeilen kann - eine beliebige Anzahl von Spalten angegeben -. Die in der Lage sein sollte, in eine einzige Linie konvergiert werden)
Dies fühlt wie ein Problem, das mit Pandas sehr lösbar sein sollte, aber ich habe Probleme, eine elegante Lösung zu finden.
Danke, das ist definitiv ein wichtiger Schritt. Gibt es dafür eine besonders effiziente Ausdrucksweise? Nach meiner Erfahrung (und ersten Tests mit Ihrem Vorschlag) kann .agg() zu einer sehr langsamen Ausführung führen (wahrscheinlich nicht überraschend). Vielleicht unvermeidbar? – severian
Vielleicht? Sie könnten versuchen, eingebaute numpy-Funktionen ("sum", "max" usw.) zu verwenden, um die Geschwindigkeit zu erhöhen (die cythonisierte Funktionen verwendet). Dies liegt wahrscheinlich außerhalb des normalen Anwendungsfalls für groupby, da Sie wahrscheinlich viele Gruppen relativ zur Gesamtgröße des DataFrames haben. –
Nun, abgesehen von einer anderen Antwort weiß ich zumindest, dass ich nichts zu offensichtlich übersehen habe ... – severian