import pandas as pd import seaborn as sns regions = ['Eastern Asia','Eastern Asia','Eastern Asia', 'South Asia','South Asia','South Asia'] country=['a','b','c','d','e','f'] total_vaccine =[12, 15, 16, 18,20,50] df = pd.DataFrame(list(zip(regions,country,total_vaccine)), columns=['region','country', 'Vaccine']) df.head() grp=df.groupby('region').apply(lambda x:x.nlargest(2,"Vaccine")).reset_index(drop=True) grp.head() df1=grp['region'].unique() df1 df1=pd.DataFrame(df1) df1 df1.rename(columns={0:'Regions'},inplace=True) df1 def plot(region): for region in df1["Regions"]: df_100=grp[grp['region'] == region] if not df_100.empty: sns.barplot( df_100['country'], df_100['Vaccine'], palette ='coolwarm') plot('South Asia')
Plotting the graph for both South Asia and Eastern Asia using the above function is showing the same countries and same graphs .What mistake am I doing while writing the above code, I can’t figure that out?
Advertisement
Answer
The problem is with your function. Remove the for loop and it should work
def plot_graph(region): df_100=grp[grp['region'] == region] if not df_100.empty: sns.barplot( df_100['country'], df_100['Vaccine'], palette ='coolwarm')