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

基于Pandas按Event_Number分组筛选p_and_s>2的Well值

处理大型Pandas DataFrame:按分组筛选符合条件的列值

针对你这个包含50万+行的大型DataFrame需求,我来分享几个高效且实用的解决方案,兼顾性能和可读性:

先明确你的需求和样本数据

你需要按Event_Number分组,提取每组中p_and_s大于2对应的Well值。先把你给出的样本数据用代码还原出来,方便测试:

import pandas as pd

data = {
    'Event_Number': [1,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8],
    'Well': [7,9,15,7,9,15,5,7,16,7,15,7,9,15,5,7,7,9,15,7,15],
    'p_and_s': [4.0,0.0,0.0,2.0,7.0,0.0,0.0,8.0,3.0,8.0,0.0,8.0,3.0,6.0,0.0,8.0,8.0,0.0,0.0,8.0,4.0]
}
df = pd.DataFrame(data)

方案1:先过滤再分组(强烈推荐,性能最优)

因为你的数据量很大,提前过滤不符合条件的行能大幅减少后续分组的计算量,这是处理大数据集的核心思路之一。

步骤很简单:

  1. 先用布尔索引筛选出p_and_s > 2的所有行
  2. 再按Event_Number分组,按需整理结果
# 第一步:过滤符合条件的行
filtered_rows = df[df['p_and_s'] > 2]

# 如果你需要保留完整的DataFrame结构(包含所有列),直接重置索引即可
target_df = filtered_rows.reset_index(drop=True)

# 如果你只需要每组对应的Well值列表,用聚合函数
wells_per_event = filtered_rows.groupby('Event_Number')['Well'].agg(list)

针对样本数据,target_df的输出如下:

Event_Number  Well  p_and_s
0              1     7      4.0
1              2     9      7.0
2              3     7      8.0
3              3    16      3.0
4              4     7      8.0
5              5     7      8.0
6              5     9      3.0
7              5    15      6.0
8              6     7      8.0
9              7     7      8.0
10             8     7      8.0
11             8    15      4.0

方案2:分组后逐组过滤(适合复杂逻辑)

如果你的需求后续有扩展,比如每组内需要更复杂的判断逻辑,可以用groupby().apply()来实现。不过要注意:这种方式性能比方案1差,因为它会逐组处理所有数据,适合数据量相对小或者逻辑复杂的场景。

def get_valid_wells(group):
    # 每组内筛选p_and_s>2的Well值
    return group[group['p_and_s'] > 2]['Well']

# 应用函数并整理结果
result = df.groupby('Event_Number').apply(get_valid_wells).reset_index(name='Well')

一些性能小贴士

  • 对于50万+行的数据集,方案1的执行速度至少是方案2的2-3倍,一定要优先考虑。
  • 可以用df.query('p_and_s > 2')替代df[df['p_and_s'] > 2],语法更简洁,性能几乎一致。
  • 如果p_and_s列有缺失值,记得先处理(比如df['p_and_s'].fillna(0, inplace=True)),避免布尔索引出现意外结果。

内容的提问来源于stack exchange,提问作者Khalil Al Hooti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:56:39