Pandas查找累计值超阈值对应level并存储为嵌套列表的方法
Pandas分组获取累计金额达阈值对应level值实现方案
核心思路
- 按
user_id、profile、item三个维度拆分数据组 - 筛选出所有累计金额达到/超过阈值的记录,每个分组取排序后第一条符合条件的记录(即刚好达标的那条)
- 最终按用户维度聚合对应level值,转换为嵌套列表格式
完整实现代码
import pandas as pd # 阈值可根据实际需求修改 threshold = 40 # 若原始数据未按level升序排列,先执行排序保证取到首次达标的记录 df = df.sort_values(by=['user_id', 'profile', 'item', 'level']).reset_index(drop=True) result = ( # 先过滤出所有达标的记录 df[df['cumulative_amount'] >= threshold] # 按三个维度分组,取每组第一条达标记录 .groupby(['user_id', 'profile', 'item'], as_index=False) .first() # 按用户维度聚合level为列表 .groupby('user_id')['level'] .agg(list) # 转换为最终需要的嵌套列表 .tolist() )
结果验证
针对提供的样例数据,执行上述代码后result的输出为:
[[2, 3, 1, 2], [5, 6, 6, 3]]
完全匹配期望输出格式。
注意事项
- 必须保证每个
(user_id, profile, item)分组内的数据按level从小到大排序,否则可能取到非首次达标的level值 - 若存在分组始终未达到阈值的情况,上述代码会自动忽略该分组,如果需要保留占位值,可以在分组逻辑中补充缺失值处理
内容的提问来源于stack exchange,提问作者ianux22
相关产品推荐
相关产品推荐

