Niektóre z moich danych wygląda następująco:Python Pandy - łączące się głównie zduplikowane wiersze
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35
Próbuję dostać się do punktu, w którym mogę uruchomić
data.set_index(['date', 'name'])
Ale, jak z danymi -jest oczywiście duplikatami (jak pokazano powyżej), więc nie mogę tego zrobić (i nie chcę indeksu z duplikatami, i nie mogę po prostu drop_duplicates(), ponieważ to by utraciło dane).
Chciałbym móc wymusić wiersze, które mają te same wartości [data, nazwa] w jednym wierszu, jeśli można je pomyślnie konwergować na podstawie pewnych wartości NaN (podobnie do zachowania combined_first()) . Na przykład, powyższa skończy się na
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35
Jeśli dwie wartości są różne i nie jest NaN, dwa wiersze nie powinny być konwergentnych (to będzie prawdopodobnie błąd, że muszę do kontynuacji).
(Aby przedłużyć powyższy przykład, w rzeczywistości może być dowolna liczba linii - ze względu na dowolną liczbę kolumn. - co powinno być możliwe zbiegały się jednym wierszu)
to czuje jak problem, który powinien być bardzo rozwiązalny przez pandy, ale mam problem ze znalezieniem eleganckiego rozwiązania.
Dzięki, że zdecydowanie ogranicza kluczowy krok. Czy jest to szczególnie skuteczny idiom? Z mojego doświadczenia (i wstępnego testowania za pomocą twojej sugestii), .agg() może spowodować bardzo powolne wykonywanie (prawdopodobnie nie dziwi). Może nieuniknione? – severian
Może? Możesz spróbować użyć wbudowanych funkcji numpy ("sum", "max", itp.), Aby przyspieszyć (co wykorzystuje funkcje cytonizowane). Jest to prawdopodobnie poza zwykłym przypadkiem użycia dla groupby, ponieważ prawdopodobnie kończysz z wieloma grupami w stosunku do całkowitego rozmiaru DataFrame. –
Cóż, z inną odpowiedzią, przynajmniej wiem, że nie przeoczyłem niczego zbyt oczywistego ... – severian