Home > OS >  Inputting first and last name to output a value in Pandas Dataframe
Inputting first and last name to output a value in Pandas Dataframe

Time:11-18

I am trying to create an input function that returns a value for the corresponding first and last name. For this example i'd like to be able to enter "Emily" and "Bell" and return "attempts: 3"

Heres my code so far:

import pandas as pd
import numpy as np
data = {
    'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily', 
             'Michael', 'Matthew', 'Laura', 'Kevin', 'Jonas'],
    'lastname': ['Thompson','Wu', 'Downs','Hunter','Bell','Cisneros', 'Becker', 'Sims', 'Gallegos', 'Horne'],
    'score': [12.5, 9, 16.5, np.nan, 9, 20, 14.5, np.nan, 8, 19],
    'attempts': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
    'qualify': ['yes', 'no', 'yes', 'no', 'no',
                'yes', 'yes', 'no', 'no', 'yes']
}
data

labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(data, index=labels)
df

fname = input()
lname = input()
 
print(f"{fname} {lname}'s number of attempts: {???}")

I thought there would be specific documentation for this but I cant find any on the pandas dataframe documentation. I am assuming its pretty simple but can't find it.

CodePudding user response:

fname = input()
lname = input()
 
# use loc to filter the row and then capture the value from attempts columns
print(f"{fname} {lname}'s number of attempts:{df.loc[df['name'].eq(fname) & df['lastname'].eq(lname)]['attempts'].squeeze()}")
Emily
Bell
Emily Bell's number of attempts:2

alternately, to avoid mismatch due to case

fname = input().lower()
lname = input().lower()
 
print(f"{fname} {lname}'s number of attempts:{df.loc[(df['name'].str.lower() == fname) & (df['lastname'].str.lower() == lname)]['attempts'].squeeze()}")
emily
BELL
emily bell's number of attempts:2

CodePudding user response:

Try this:

df[(df['name'] == fname) & (df['lastname'] == lname)]['attempts'].squeeze()
  • Related