Создание подзаголовков из списка подфреймов данных в Pandas

Я работаю над проектом по продаже видеоигр на kaggle.

Первые 5 записей этих данных (за исключением нескольких столбцов):

        Name                Platform    Genre        Publisher  NA_Sales    EU_Sales    JP_Sales    Global_Sales
0   Wii Sports                Wii      Sports        Nintendo   41.49       29.02        3.77        82.74
1   Super Mario Bros.         NES      Platform      Nintendo   29.08       3.58         6.81        40.24
2   Mario Kart Wii            Wii      Racing        Nintendo   15.85       12.88        3.79        35.82
3   Wii Sports Resort         Wii      Sports        Nintendo   15.75       11.01        3.28        33.00
4   Pokemon Red/Pokemon Blue  GB       Role-Playing  Nintendo   11.27       8.89         10.22       31.37

Я хочу сравнить продажи жанров Sony и Nintendo по Platform (консоль). Итак, что я сделал до сих пор, это сначала создал Sony sub dataframes, например, sony_spt = sony.loc[sony['Genre']=='Sports'].drop(columns=['Year', 'Publisher']), а затем plot. В этом примере создается plot:

# Sony sports sub df
sony_spt.groupby('Platform').sum().plot(kind='bar', figsize=(15, 7))

plt.xlabel('Platform')
plt.ylabel('Sales in $1m\'s')
plt.title('Sony sales in games per console for Sports genre')
plt.show()

введите описание изображения здесь

Я поместил остальную часть моего саба dataframes, который я собрал для Nintendo и Sony, в list. Например, мой список жанров Sony - sony_genre_list = [sony_spt, sony_msc, sony_puz, sony_sim, sony_sgy, sony_ftg, sony_adv, sony_rpy, sony_sht, sony_rac, sony_plt, sony_act]. Список всех жанров: спорт, разное, головоломки, симуляторы, стратегии, файтинг, приключения, ролевые игры, стрельба, гонки, платформеры и экшн.

Как я могу сэкономить время и сделать subplots (как тот, который я продемонстрировал) из этого list из sub df's, чтобы сравнить продажи жанров на консоли / платформе?


person pragmatic learner    schedule 22.07.2020    source источник


Ответы (1)


Вы можете попробовать zip:

sony_genre_list = [sony_spt, sony_msc, sony_puz, sony_sim, sony_sgy, sony_ftg, sony_adv, sony_rpy, sony_sht, sony_rac, sony_plt, sony_act]

# custumize nrows, ncols, figsize
fig, axes = plt.subplots(nrows=len(sony_genre_list), ncols=1, 
                         figsize=(7,30))

for df, ax in zip(sony_genre_list, axes.ravel()):
    df.groupby('Platform').sum().plot(kind='bar', ax=ax)

Вы также можете обойти создание sony_genre_list с помощью groupby:

for genre, df in sony.groupby('Genre'):
    ax = df.groupby('Platform').sum().plot(kind='bar')
person Quang Hoang    schedule 22.07.2020