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

基于条件筛选Pandas透视表(多级DataFrame)的技术问询

多级列透视表的筛选方案

我来帮你搞定这个多级列透视表的筛选需求!先明确下你的透视表结构:pv的列是双层多级索引——第一层固定为Base Report,第二层是各个设施名称(Roseville、Sacramento、South Sacramento),行索引是TimeToRun。下面分几种常见场景给你具体的筛选方法:

1. 筛选特定设施的列

如果只想看某一个或几个设施的数据,有两种简洁的方式:

  • 用元组定位列:直接指定多级索引的层级值,比如只看Roseville的数据:
    # 获取单个设施的Series
    roseville_data = pv.loc[:, ('Base Report', 'Roseville')]
    # 如果要保留DataFrame格式,把设施名放到列表里
    roseville_df = pv.loc[:, ('Base Report', ['Roseville'])]
    # 选多个设施
    multi_facility_df = pv.loc[:, ('Base Report', ['Roseville', 'Sacramento'])]
    
  • 用xs方法快速取层级:因为第一层列索引都是Base Report,可以直接跳过第一层,取第二层的指定值:
    roseville_data = pv.xs('Roseville', level='FacilityName', axis=1)
    

2. 结合行(TimeToRun)的筛选

如果需要同时筛选指定的运行时间和设施,直接组合行和列的定位即可:

# 比如筛选TimeToRun为"Morning"且设施为South Sacramento的数据
filtered_data = pv.loc['Morning', ('Base Report', 'South Sacramento')]
# 保留DataFrame格式
filtered_df = pv.loc[['Morning'], ('Base Report', ['South Sacramento'])]

3. 参数化灵活筛选

如果你的筛选条件是动态参数(比如从用户输入、配置文件获取),可以把参数赋值给变量,再代入代码:

# 示例参数
target_time = "Afternoon"
target_facilities = ["Roseville", "South Sacramento"]

# 执行筛选
result = pv.loc[[target_time], ('Base Report', target_facilities)]

4. 按列值条件筛选

如果要筛选计数大于某个阈值的列(比如只保留有数据的列),可以直接对列进行条件判断:

# 筛选所有行中至少有一个计数>0的列
non_zero_cols = pv.loc[:, pv.any()]
# 筛选第一行计数>2的列(假设第一行是你要判断的时间点)
high_count_cols = pv.loc[:, pv.iloc[0] > 2]

可选:扁平化多级列(简化筛选)

如果觉得多级列操作麻烦,可以先把列名扁平化,变成Base Report_设施名的格式,后续筛选更直观:

# 扁平化列名
pv_flat = pv.copy()
pv_flat.columns = pv_flat.columns.map('_'.join)
# 比如筛选包含Roseville的列
roseville_data = pv_flat.filter(like='Roseville')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:43:59