如何使用for循环为每种类型的前五名游戏绘制条形图

How to plot bar graph for top five game for each genre using for loop

genre_game=group_game.groupby(["Genre","Name"])"Global_Sales"].sum().reset_index().sort_values(["Genre","Global_Sales"],ascending=(True,False))

       
genre_game

enter image description here

genre_s=df["Genre"].unique()
genre_sorted=sorted(genre_s)
print(f'List of : {genre_sorted}' )

列表:['Action'、'Adventure'、'Fighting'、'Misc'、'Platform'、'Puzzle'、'Racing' , 'Role-Playing', 'Shooter', 'Simulation', 'Sports', 'Strategy']

def f(genre):
    for genre  in genre_sorted:
        
        
        plt.bar(genre_game[genre][:5],genre_game["Global_Sales"][genre:genre+5])
        plt.xticks(rotation=90)
        
        
f("Adventure")

你可以不用循环。此示例按前 2 大销售额分组,但您可以将 2 更改为 5 或任何数字。

import pandas as pd
import matplotlib.pyplot as plt

genre = ['Action', 'Action', 'Action', 'Strategy', 'Strategy', 'Strategy']
name =['GTAV', 'GTAIV', 'FIFA13', 'Worms2', 'Tropico', 'WarOverworld']
sales = [55, 13, 16, 1, 1, 0.5]
df = pd.DataFrame(list(zip(genre, name, sales)), 
                  columns=['genre', 'name', 'sales'])

df2 = df.groupby('genre') \
                 .apply(lambda x: x.nlargest(2, 'sales')) \
                 .reset_index(drop=True) 

plt.bar(df2.name, df2.sales)
plt.xlabel('x')
plt.ylabel('% global')
plt.show()

这里是来源 df 的样子:

这是前 2 df2 的样子: