python - 熊猫:达到阈值后从累积列中删除行
问题描述
我正在使用以下数据框:
id1 Val cum_val
3233 24 24
3233 12 36
3233 7 43
3233 6 49
3233 6 55
3233 3 58
3255 5 5
3255 44 49
3255 4 53
3255 8 61
3255 8 69
其中 cum_val 列是每组 id1 3233 和 3255 中 Val 的累积。
我想得到以下信息:
id1 Val cum_val
3233 24 24
3233 12 36
3233 7 43
3233 6 49
3233 6 55
3255 5 5
3255 44 49
3255 4 53
即只保留行,直到cum_val
达到大于 50 的第一个值。例如,对于 id1 = 3255,我已经丢弃cum_val
了 61 和 69 的行,因为 53 是大于 50 的第一个值。
我不知道如何解决这个问题。
解决方案
用于DataFrameGroupBy.shift
移动每组的值并测试不太喜欢50
匹配后的下一组50
:
df = df[df.groupby('id1')['cum_val'].shift(fill_value=0).lt(50)]
print (df)
id1 Val cum_val
0 3233 24 24
1 3233 12 36
2 3233 7 43
3 3233 6 49
4 3233 6 55
6 3255 5 5
7 3255 44 49
8 3255 4 53
推荐阅读
- python - 如何使用 cmd 安装 pygame?
- javascript - REACTJS - 分配一个
到一个变量? - flutter - 查询我的子集合的第一个文档的数据
- java - Java - 将数组分组为更小的数组
- firebase - Firebase 身份验证重置密码
- sql-server - SQL Server Management Studio (SSMS)“查看依赖项”未正确显示
- swiftui - SwiftUI 应用程序中的新窗口中缺少窗口控制按钮
- flutter - 我得到了 user_id 的空值
- gitlab - 分叉的 GitLab 项目上没有 CI/CD
- reactjs - 我怎样才能改变 react-google-maps
运行时组件道具 drawingMode 道具,无需更改组件状态