从 Pandas 中的子数据框列表创建子图
Creating subplots from a list of sub dataframes in Pandas
我正在 kaggle 从事视频游戏销售项目。
这条数据的前5条记录是(为space取出几列):
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
我想做的是通过 Platform
(控制台)比较索尼和任天堂类型的销量。所以到目前为止我所做的是首先通过 sony_spt = sony.loc[sony['Genre']=='Sports'].drop(columns=['Year', 'Publisher'])
创建 Sony sub dataframes
,然后 plot
。
此示例创建 plot
:
# Sony sports sub df
sony_spt.groupby('Platform').sum().plot(kind='bar', figsize=(15, 7))
plt.xlabel('Platform')
plt.ylabel('Sales in m\'s')
plt.title('Sony sales in games per console for Sports genre')
plt.show()
我已将我为任天堂和索尼收集的剩余子 dataframes
放在 list
中。例如,我的索尼流派列表是 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
(就像我演示过的那样)这个 sub df's
的 list
来比较每个 console/platform 的流派销量?
你可以试试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)
您也可以使用 groupby
:
绕过 sony_genre_list
的创建
for genre, df in sony.groupby('Genre'):
ax = df.groupby('Platform').sum().plot(kind='bar')
我正在 kaggle 从事视频游戏销售项目。
这条数据的前5条记录是(为space取出几列):
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
我想做的是通过 Platform
(控制台)比较索尼和任天堂类型的销量。所以到目前为止我所做的是首先通过 sony_spt = sony.loc[sony['Genre']=='Sports'].drop(columns=['Year', 'Publisher'])
创建 Sony sub dataframes
,然后 plot
。
此示例创建 plot
:
# Sony sports sub df
sony_spt.groupby('Platform').sum().plot(kind='bar', figsize=(15, 7))
plt.xlabel('Platform')
plt.ylabel('Sales in m\'s')
plt.title('Sony sales in games per console for Sports genre')
plt.show()
我已将我为任天堂和索尼收集的剩余子 dataframes
放在 list
中。例如,我的索尼流派列表是 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
(就像我演示过的那样)这个 sub df's
的 list
来比较每个 console/platform 的流派销量?
你可以试试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)
您也可以使用 groupby
:
sony_genre_list
的创建
for genre, df in sony.groupby('Genre'):
ax = df.groupby('Platform').sum().plot(kind='bar')