Encuentre la ubicación de un elemento en el marco de datos de Pandas en Python

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: 
 

Dataframe

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 : 
 

index of element in dataframe

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 : 
 

indices of elements in dataframe

Publicación traducida automáticamente

Artículo escrito por ankthon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *