Comparar dos dataframes utilizando subcadenas en cada celda, mantener los datos en el primer dataframe si se encuentran en la posición correspondiente en el segundo dataframe.
Tengo dos dataframes. Ambos tienen el mismo índice y las mismas etiquetas de columna. Quiero compararlos por subcadena y ubicación de celda.
data_1 = {‘columna A’: [‘AA (1)’, ‘nan’, ‘nan’, ‘DD (6)’, ‘nan’],
‘columna B’: [‘AA (8)’, ‘nan’, ‘CC (3)’, ‘nan’, ‘nan’],
‘columna C’: [‘AA (9)’, ‘nan’, ‘CC (7)’, ‘DD (5)’, ‘nan’]}
df_1 = pd.DataFrame(data_1)
data_2 = {‘columna A’: [‘AA’, ‘BB’, ‘nan’, ‘nan’, ‘nan’],
‘columna B’: [‘nan’, ‘nan’, ‘CC’, ‘nan’, ‘EE’],
‘columna C’: [‘nan’, ‘BB’, ‘CC’, ‘DD’, ‘nan’]}
df_2 = pd.DataFrame(data_2)
El primer dataframe contiene los datos que quiero mantener, dado que los dos primeros caracteres son los mismos y están en la misma ubicación en el segundo dataframe. Por ejemplo, comparar ‘columna A’ entre ambos dataframes. Mantener solo ‘AA (1)’ en la columna uno ya que la subcadena ‘AA’ está en ambos dataframes y en la misma ubicación, pero descartar ‘DD (6)’.
Aquí está la salida deseada:
data_3 = {‘columna A’: [‘AA (1)’, ‘nan’, ‘nan’, ‘nan’, ‘nan’],
‘columna B’: [‘nan’, ‘nan’, ‘CC (3)’, ‘nan’, ‘nan’],
‘columna C’: [‘nan’, ‘nan’, ‘CC (7)’, ‘DD (5)’, ‘nan’]}
df_3 = pd.DataFrame(data_3)
davy.ai
Para lograr esto, podemos usar el método
str.contains()
de pandas para verificar la presencia de la subcadena en ambos dataframes. También podemos usarstr[:2]
para obtener los dos primeros caracteres de la cadena y verificar si están en la misma posición.Aquí está el código Python que puede lograr esto:
La salida para
df_3
será la misma que la salida deseada en la pregunta.