python - pandas:如果组的最后一行具有特定的列值,如何删除组的所有行
问题描述
我有一个df,如下所示
a c d
0 ABC 0.4 y
1 ABC 0.3 x
2 DEF 0.3 x
3 DEF 0.2 x
4 DEF 0.5 x
5 DEF 0.4 y
我想按列'c'对df进行排序,然后按列'a'对df进行排序,然后如果组的最后一行的列'd'='y'的值,则删除组的所有行
我的预期输出是
a c d
2 DEF 0.2 x
3 DEF 0.3 x
4 DEF 0.4 y
5 DEF 0.5 x
因此,在按 col 'c' 作为组 d = y 中的最后一行排序后,组 'ABC' 被删除,但组 'DEF' 保留为 DEF col d = x 中的最后一行
解决方案
直接从你的逻辑:
mask = (df.sort_values('c') # sort the values by `c`
.groupby('a')['d'] # groupby `a` and look at `d`
.transform('last') # select the last rows
.ne('y') # check if last rows are `y`
.reindex(df.index) # reindex as the original data
)
df = df[mask]
输出:
a c d
2 DEF 0.3 x
3 DEF 0.2 x
4 DEF 0.5 x
5 DEF 0.4 y
推荐阅读
- javascript - ArrayBuffer 转 jpeg
- javascript - 如何使用 .click 在同一个 DOM 对象上设置间隔和清除间隔?
- react-native - 如何在反应原生天才聊天中显示与我聊天的人的名字
- go - 对于 cobra 应用程序,*sqlx.DB 对象应该保存在哪里?
- bottlenose - 如何修复 HTTP 错误 503:服务不可用错误
- opencl - openCL 中是否存在代码提升?如果没有,有什么方法可以实现吗?
- reactjs - 在 next.js 中访问被屏蔽的 URL
- android - Android Studio 3.3 文件 > 新建 > Android 资源文件
- html - 制作一个