Si può eseguire un join sinistro in panda che seleziona solo la prima corrispondenza a destra? Esempio:Si può eseguire un join sinistro in panda che seleziona solo la prima corrispondenza a destra?
left = pd.DataFrame()
left['age'] = [11, 12]
right = pd.DataFrame()
right['age'] = [10, 11, 11]
right['salary'] = [ 100, 150, 200 ]
left.merge(right, how='left', on='age')
Returns
age salary
0 11 100
1 11 200
2 12 NaN
Ma quello che vorrei è quello di preservare il numero di righe di sinistra, semplicemente prendendo la prima partita. Cioè:
age salary
0 11 100
2 12 NaN
Così ho usato
left.merge(right.drop_duplicates(['age']), how='left', on='age')
ma credo che questo fa una copia completa del diritto. E ha un odore strano.
C'è un modo più elegante?
Questo sarebbe semplice da aggiungere come opzione per "unire", ma al momento non è implementato. – Jeff
Grazie Jeff. Lo chiederò. Lascerà la domanda qui nel caso qualcuno possa indicarmi come evitare la copia (o l'effetto collaterale) nel frattempo. – Quant