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

如何高效对多条件Pandas DataFrame进行筛选与聚合?

Pandas多条件筛选与聚合的优化实现

需求清单

  • 筛选Category为"A"或"B"的行
  • 保留Value大于10的行
  • 按SubCategory分组,计算每组Value的总和
  • 按聚合后的Value总和降序排序

测试用DataFrame

import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'C', 'B', 'A'],
    'SubCategory': ['X', 'Y', 'X', 'Z', 'X', 'Y'],
    'Value': [5, 15, 20, 25, 10, 30],
    'Date': pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06'])
}
df = pd.DataFrame(data)

原始实现代码

filtered_df = df[(df['Category'].isin(['A', 'B'])) & (df['Value'] > 10)]
grouped_df = filtered_df.groupby('SubCategory')['Value'].sum().reset_index()
sorted_df = grouped_df.sort_values(by='Value', ascending=False)
print(sorted_df)

优化方案:链式调用+简洁语法

你的代码逻辑完全正确,这里提供一个同时提升可读性和大型数据集处理效率的优化版本:

result = (df
          .query("Category in ['A', 'B'] and Value > 10")
          .groupby('SubCategory', as_index=False)['Value'].sum()
          .sort_values(by='Value', ascending=False))

print(result)

优化细节说明

  1. 可读性升级:

    • 用query()替代布尔索引,条件写法接近自然语言,多条件场景下比嵌套布尔表达式更直观
    • 链式调用把所有操作串成完整逻辑链,无需多余中间变量,一眼就能理清数据处理流程
  2. 效率提升:

    • groupby时设置as_index=False,直接生成带列名的结果,省去额外的reset_index()步骤,减少内存操作
    • 链式调用不会生成中间DataFrame副本,处理超大型数据集时能节省更多内存
    • query()性能与布尔索引持平,但代码简洁度更高

最终输出

SubCategory  Value
1           Y     45
0           X     20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:12:04