La operación pandas.DataFrame.lookup está "en desuso desde la versión 1.2.0" y desde entonces ha invalidado muchas respuestas anteriores.
Esta publicación intenta funcionar como un recurso canónico para buscar pares de columnas de fila correspondientes en pandas versiones 1.2.0 y posteriores.
Algunas respuestas anteriores a este tipo de pregunta (ahora en desuso):
Algunas respuestas actuales a esta pregunta:
Dado el siguiente DataFrame:
df = pd.DataFrame({'Col': ['B', 'A', 'A', 'B'], 'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}) Col AB 0 B 1 5 1 A 2 6 2 A 3 7 3 B 4 8 Me gustaría poder buscar el valor correspondiente en la columna especificada en Col :
Me gustaría que mi resultado se vea así:
Col AB Val 0 B 1 5 5 1 A 2 6 2 2 A 3 7 3 3 B 4 8 8Dado el siguiente DataFrame:
df = pd.DataFrame({'Col': ['B', 'A', 'A', 'B'], 'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}, index=[0, 2, 8, 9]) Col AB 0 B 1 5 2 A 2 6 8 A 3 7 9 B 4 8Me gustaría conservar el índice pero aún encontrar el valor correspondiente correcto:
Col AB Val 0 B 1 5 5 2 A 2 6 2 8 A 3 7 3 9 B 4 8 8 df = pd.DataFrame({'Col': ['B', 'A', 'A', 'B'], 'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}, index=pd.MultiIndex.from_product([['C', 'D'], ['E', 'F']])) Col AB CEB 1 5 FA 2 6 DEA 3 7 FB 4 8Me gustaría conservar el índice pero aún encontrar el valor correspondiente correcto:
Col AB Val CEB 1 5 5 FA 2 6 2 DEA 3 7 3 FB 4 8 8Dado el siguiente DataFrame
df = pd.DataFrame({'Col': ['B', 'A', 'A', 'C'], 'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}) Col AB 0 B 1 5 1 A 2 6 2 A 3 7 3 C 4 8 # Column C does not correspond with any column Me gustaría buscar los valores correspondientes si existe uno; de lo contrario, me gustaría tenerlo predeterminado en 0
Col AB Val 0 B 1 5 5 1 A 2 6 2 2 A 3 7 3 3 C 4 8 0 # Default value 0 since C does not correspondDado el siguiente DataFrame:
Col AB 0 B 1 5 1 A 2 6 2 A 3 7 3 NaN 4 8 # <- Missing Lookup Key Me gustaría que cualquier valor de NaN en Col resulte en un valor de NaN en Val
Col AB Val 0 B 1 5 5.0 1 A 2 6 2.0 2 A 3 7 3.0 3 NaN 4 8 NaN # NaN to indicate missingOtra opción es crear una tupla de las columnas de búsqueda, girar el marco de datos y seleccionar las columnas relevantes con las tuplas:
cols = [(ent, ent) for ent in df.Col.unique()] df.assign(Val = df.pivot(index = None, columns = 'Col') .reindex(columns = cols) .ffill(axis=1) .iloc[:, -1]) Col AB Val 0 B 1 5 5.0 2 A 2 6 2.0 8 A 3 7 3.0 9 B 4 8 8.0