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
相关产品推荐
相关产品推荐

