Search code examples
pythonpandasdataframepandas-loc

How to apply iloc in a Dataframe depending on a column value


I have a Dataframe with the follow columns:
"Country Name"
"Indicator Code"
"Porcentaje de Registros" (as it is show in the image) for each country there are 32 indicator codes with its percentage value.

The values are order in an descending way, and I need to keep the 15th highest values for each country, that means for example for Ecuador I need to know which ones are the 15th indicators with highest value. I was trying the following:

countries = gender['Country Name'].drop_duplicates().to_list() 
for countries in countries:
          test = RelevantFeaturesByID[RelevantFeaturesByID['Country Name']==countries].set_index(["Country Name", "Indicator Code"]).iloc[0:15]
test

But it just returns the first 15 rows for one country. What am I doing wrong?

enter image description here


Solution

  • There is a mispelling in a loop statement for countries in countries: and then you are using countries again. That for sure is a problem. Also you substitute for test multiple times.

    I am not sure whether I understood well what is your aim, however that seems to be a good basis to start:

    # sorting with respect to countries and their percentage
    df = df.sort_values(by=[df.columns[0],df.columns[-1]],ascending=[True,False])
    
    # choosing unique values of country names
    countries = df[df.columns[0]].unique()
    
    test = []
    for country in countries:
        test.append( df.loc[df["Country Name"]==country].iloc[0:15] )