En este artículo, veremos cómo encontrar la posición de un elemento en el marco de datos utilizando una función definida por el usuario. Primero, creemos un marco de datos simple con un diccionario de listas, digamos que los nombres de las columnas son: ‘Nombre’, ‘Edad’, ‘Ciudad’ y ‘Sección’.
Python3
# Import pandas library import pandas as pd # List of tuples students = [('Ankit', 23, 'Delhi', 'A'), ('Swapnil', 22, 'Delhi', 'B'), ('Aman', 22, 'Dehradun', 'A'), ('Jiten', 22, 'Delhi', 'A'), ('Jeet', 21, 'Mumbai', 'B') ] # Creating Dataframe object df = pd.DataFrame(students, columns =['Name', 'Age', 'City', 'Section']) df
Producción:
Ejemplo 1: encuentre la ubicación de un elemento en el marco de datos.
Python3
# Import pandas library import pandas as pd # List of tuples students = [('Ankit', 23, 'Delhi', 'A'), ('Swapnil', 22, 'Delhi', 'B'), ('Aman', 22, 'Dehradun', 'A'), ('Jiten', 22, 'Delhi', 'A'), ('Jeet', 21, 'Mumbai', 'B') ] # Creating Dataframe object df = pd.DataFrame(students, columns =['Name', 'Age', 'City', 'Section']) # This function will return a list of # positions where element exists # in the dataframe. def getIndexes(dfObj, value): # Empty list listOfPos = [] # isin() method will return a dataframe with # boolean values, True at the positions # where element exists result = dfObj.isin([value]) # any() method will return # a boolean series seriesObj = result.any() # Get list of column names where # element exists columnNames = list(seriesObj[seriesObj == True].index) # Iterate over the list of columns and # extract the row index where element exists for col in columnNames: rows = list(result[col][result[col] == True].index) for row in rows: listOfPos.append((row, col)) # This list contains a list tuples with # the index of element in the dataframe return listOfPos # Calling getIndexes() function to get # the index positions of all occurrences # of 22 in the dataframe listOfPositions = getIndexes(df, 22) print('Index positions of 22 in Dataframe : ') # Printing the position for i in range(len(listOfPositions)): print( listOfPositions[i])
Producción :
Ahora comprendamos cómo funciona la función getIndexes(). El isin() , dataframe/series.any(), acepta valores y devuelve un marco de datos con valores booleanos. Este marco de datos booleano tiene un tamaño similar al del primer marco de datos original. El valor es True en los lugares donde existe el elemento dado en el marco de datos, de lo contrario, es False. Luego busque los nombres de las columnas que contienen el elemento 22. Podemos lograr esto obteniendo los nombres de las columnas en el marco de datos booleano que contiene True. Ahora, en el marco de datos booleano iteramos sobre cada una de las columnas seleccionadas y para cada columna, encontramos filas con True. Ahora, estas combinaciones de nombres de columna e índices de fila donde existe True son las posiciones de índice de 22 en el marco de datos. Así es como getIndexes() encuentra las posiciones de índice exactas del elemento dado y almacena cada posición en forma de tupla (fila, columna). Finalmente, devuelve una lista de tuplas que representan sus posiciones de índice en el marco de datos.
Ejemplo 2: busque la ubicación de varios elementos en el DataFrame.
Python3
# Import pandas library import pandas as pd # List of tuples students = [('Ankit', 23, 'Delhi', 'A'), ('Swapnil', 22, 'Delhi', 'B'), ('Aman', 22, 'Dehradun', 'A'), ('Jiten', 22, 'Delhi', 'A'), ('Jeet', 21, 'Mumbai', 'B') ] # Creating Dataframe object df = pd.DataFrame(students, columns =['Name', 'Age', 'City', 'Section']) # This function will return a # list of positions where # element exists in dataframe def getIndexes(dfObj, value): # Empty list listOfPos = [] # isin() method will return a dataframe with # boolean values, True at the positions # where element exists result = dfObj.isin([value]) # any() method will return # a boolean series seriesObj = result.any() # Get list of columns where element exists columnNames = list(seriesObj[seriesObj == True].index) # Iterate over the list of columns and # extract the row index where element exists for col in columnNames: rows = list(result[col][result[col] == True].index) for row in rows: listOfPos.append((row, col)) # This list contains a list tuples with # the index of element in the dataframe return listOfPos # Create a list which contains all the elements # whose index position you need to find listOfElems = [22, 'Delhi'] # Using dictionary comprehension to find # index positions of multiple elements # in dataframe dictOfPos = {elem: getIndexes(df, elem) for elem in listOfElems} print('Position of given elements in Dataframe are : ') # Looping through key, value pairs # in the dictionary for key, value in dictOfPos.items(): print(key, ' : ', value)
Producción :