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

Pandas如何根据分组最后一行qty值正负筛选对应分组

Pandas 按分组末行值筛选全组数据实现方案

需求说明

按id字段对数据集分组,根据每个分组最后一行qty字段的正负值,筛选出符合条件的分组的全部行数据。

样例数据

import pandas as pd
d = {'id': ['101', '101', '101', '105', '105', '106', '106'], 
    'qty': [10, -2, 20, 50, -3, 50, -12],
}
df31 = pd.DataFrame(data=d)

样例各分组末行qty属性:

  • id=101:末行qty=20,为正数
  • id=105:末行qty=-3,为负数
  • id=106:末行qty=-12,为负数

具体实现

核心思路:用groupby搭配transform('last'),为每一行匹配所属分组的末行qty值,生成布尔序列做行筛选即可,无需写循环,执行效率高。

筛选末行qty小于0的全部分组

# 构造筛选条件
filter_cond = df31.groupby('id')['qty'].transform('last') < 0
result_neg = df31[filter_cond]

执行返回结果:

id  qty
3  105   50
4  105   -3
5  106   50
6  106  -12

筛选末行qty大于0的全部分组

# 构造筛选条件
filter_cond = df31.groupby('id')['qty'].transform('last') > 0
result_pos = df31[filter_cond]

执行返回结果:

id  qty
0  101   10
1  101   -2
2  101   20

注意:如果当前数据行顺序不是分组内的逻辑顺序(比如未按时间先后排序),需要先按对应排序字段对全表排序后,再执行上述分组筛选逻辑,保证取到的末行值是业务定义下的最后一条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:48:32