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

如何在Pandas数据透视表中添加值筛选以找出Status不一致的行

Pandas 透视表:筛选不一致行、列重命名及提速方案

一、筛选v10_10与v10_11对应Status不一致的行

根据透视表的列结构,分两种情况处理:

情况1:普通单列结构(列名如v10_10_Status、v10_11_Status)

直接通过列值不等的条件筛选:

filtered_df = df_pivot[df_pivot['v10_10_Status'] != df_pivot['v10_11_Status']]

情况2:多级列结构(透视表默认生成的层级列,如('Status', 'v10_10'))

通过多级索引定位列后筛选:

filtered_df = df_pivot[df_pivot[('Status', 'v10_10')] != df_pivot[('Status', 'v10_11')]]

二、创建透视表时直接重命名列

Pandas没有直接在pivot_table中重命名列的参数,但可以通过两种方式实现:

方法1:创建后立即重命名列

适合简单的列名调整,用rename方法批量修改:

import pandas as pd

df_pivot = pd.pivot_table(
    data=原始数据,
    index='你的行索引列',  # 替换为实际行维度字段
    columns='版本列',     # 包含v10_10、v10_11的字段
    values='Status',
    aggfunc='first'      # 根据业务需求选聚合函数,如first/max/min
).rename(columns=lambda col_name: f'Status_{col_name}')

方法2:通过aggfunc字典指定字段别名

适合同时聚合多个字段的场景,直接给目标字段设置别名:

df_pivot = pd.pivot_table(
    data=原始数据,
    index='你的行索引列',
    columns='版本列',
    values={'Status': '状态'},  # 将Status重命名为“状态”
    aggfunc='first'
)

三、大型透视表提速小技巧

针对你提到的大表操作慢问题,可尝试以下优化:

  • 提前精简数据:创建透视表前,过滤掉不需要的行/列,减少计算量
  • 选择高效聚合函数:优先使用内置聚合函数(如first、max),避免自定义lambda函数
  • 减少维度冗余:只保留必要的行、列维度,避免不必要的层级
  • 大数据量场景:考虑改用dask.dataframe实现并行处理,提升效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:42:24