Tengo 2 marcos de datos que son idénticos excepto por una columna. Espero fusionar los dos y aceptar condicionalmente el valor de la columna. En este caso busco el máximo de los dos, pero en general cualquier condicional sería ideal.

import pandas as pd

df1 = pd.DataFrame([['Tom', 30], ['Jane', 40], ['Barry', 22], ['Kelly', 15]])
df2 = pd.DataFrame([['Tom', 10], ['Jane', 50], ['Barry', 22]])

Df1:

       0   1
0    Tom  30
1   Jane  40
2  Barry  22
3  Kelly  15

Df2

       0   1
0    Tom  10
1   Jane  50
2  Barry  22

Estoy buscando terminar con un marco de datos que combine los dos y tome el máximo de la columna 1.

Ejemplo:

       0   1
0    Tom  30
1   Jane  50
2  Barry  22
3  Kelly  15
0
Kendall 11 may. 2021 a las 22:35

2 respuestas

La mejor respuesta

Combine los datos, estableciendo how como outer, antes de agruparlos para obtener max:

df1.merge(df2, how='outer').groupby(0, as_index = False, sort=False).max()

       0   1
0    Tom  30
1   Jane  50
2  Barry  22
3  Kelly  15
1
sammywemmy 11 may. 2021 a las 20:05

De otra manera; append, sort_values ​​y drop_duplicates. Código abajo

df2.append(df1).sort_values(by=['0',"1"],ascending = (False, True)).drop_duplicates(subset=['0'],keep='last')

      0   1
0    Tom  30
3  Kelly  15
1   Jane  50
2  Barry  22
1
wwnde 11 may. 2021 a las 20:05