You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DataFrame的透视表与图表中移除已过滤的分类值?

问题

我的DataFrame包含游戏标题、平台、发行年份、营收等数据。原DataFrame df_samplegames 的platform字段为分类类型,包含29种平台;我通过过滤得到仅包含'3DS'、'PSV'、'WiiU'、'PS4'、'XOne'、'PC'这6种平台的新DataFrame df_finalgames。但使用该新DataFrame创建pairplot或透视表时,仍会包含已过滤掉的平台分类(比如创建透视表时列头显示所有29种平台,对应值为0)。如何让代码忽略这些不需要的平台?

相关代码示例

原DataFrame平台查询

df_samplegames['platform'].unique()

结果显示29个分类

过滤得到新DataFrame

df_finalgames = df_samplegames[df_samplegames['platform'].isin(['3DS', 'PSV', 'WiiU', 'PS4', 'XOne', 'PC'])].sort_values(by=['year', 'platform']).reset_index(drop=True)
df_finalgames['platform'].unique() # 结果显示6个分类

透视表创建代码

df_platgames = df_finalgames[['name', 'platform', 'total_sales']]
pvt_platgames = df_platgames.pivot_table(values='total_sales', index='name', columns='platform', aggfunc='sum')

结果列头仍包含所有29种平台

解决方法

问题根源在于platform是分类类型,过滤操作仅筛选了数据行,但并未更新该字段的分类列表,后续操作仍会基于原始的29种分类执行。以下两种方法可解决该问题:

  • 方法一:手动指定目标分类
    过滤完成后,重新设置platform字段的分类范围为需要保留的6种平台:
df_finalgames['platform'] = df_finalgames['platform'].astype('category').cat.set_categories(['3DS', 'PSV', 'WiiU', 'PS4', 'XOne', 'PC'])
  • 方法二:自动移除未使用分类
    利用Pandas内置方法自动剔除当前数据中未出现的分类:
df_finalgames['platform'] = df_finalgames['platform'].cat.remove_unused_categories()

执行上述任意一种操作后,再创建透视表或pairplot,就只会显示筛选后的6种平台,不会再出现已过滤掉的分类。


内容的提问来源于stack exchange,提问作者RicardoDLM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:12:37