Alcuni dei miei dati assomiglia:Python Pandas - fusione file duplicati per lo più
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35
sto cercando di arrivare al punto in cui posso correre
data.set_index(['date', 'name'])
Ma, con i dati come -è, naturalmente ci sono duplicati (come mostrato in precedenza), quindi non posso farlo (e non voglio un indice con duplicati, e non posso semplicemente drop_duplicates(), dato che questo perderà i dati).
Mi piacerebbe essere in grado di forzare le righe che hanno lo stesso valore [data, nome] in una singola riga, se possono essere convertite correttamente in base a determinati valori come NaN (simile al comportamento di combine_first()) . Per esempio, quanto sopra potrebbe finire al
date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35
Se due valori sono diversi e uno non è NaN, le due file non devono essere convergenti (questo probabilmente sarebbe un errore che avrei bisogno di follow-up su).
(Per estendere l'esempio precedente, si possono infatti essere un numero arbitrario di linee - dato un numero arbitrario di colonne -. Che dovrebbe essere in grado di essere convergenti in un'unica linea)
Questo sente come un problema che dovrebbe essere molto risolvibile tramite panda, ma ho difficoltà a trovare una soluzione elegante.
Grazie, che sicuramente riduce un passaggio chiave. C'è un idioma particolarmente efficiente con cui fare questo? Nella mia esperienza (e test iniziale usando il tuo suggerimento), .agg() può causare un'esecuzione veramente lenta (probabilmente non sorprendentemente). Forse inevitabile? – severian
Forse? Si può provare a usare le funzioni incorporate di numpy ("sum", "max", ecc.) Per velocizzarlo (che usa le funzioni cythonized). Questo è probabilmente al di fuori del normale caso d'uso per groupby perché probabilmente si avranno molti gruppi relativi alla dimensione totale di DataFrame. –
Beh, salvo un'altra risposta, almeno so di non aver perso nulla di troppo ovvio ... – severian