python - 在两个不同列上有两个条件的数据框
问题描述
我想根据两个不同列上的两个条件过滤数据框。在下面的示例中,我想过滤数据框df
以包含行,以使其包含uid
s 且列的值计数val
大于 4 大于 2。
df = pd.DataFrame({'uid':[1,1,1,2,2,3,3,4,4,4],'iid':[11,12,13,12,13,13,14,14,11,12], 'val':[3,4,5,3,5,4,5,4,3,4]})
对于这个数据框,我的输出应该是
df
uid iid val
0 1 11 3
1 1 12 4
2 1 13 5
5 3 13 4
6 3 14 5
7 4 14 4
8 4 11 3
9 4 12 4
在这里,我过滤掉了uid
2,因为uid == 2
和val >= 4
小于 2 的行数。我只想保留值大于 4 的行数大于或等于 2 的uid
行。val
解决方案
您需要groupby.transform
一次sum
检查 val 大于或等于ge
4 的位置。并检查结果是否ge
将其用作 df 上的布尔过滤器。
print (df[df['val'].ge(4).groupby(df['uid']).transform(sum).ge(2)])
uid iid val
0 1 11 3
1 1 12 4
2 1 13 5
5 3 13 4
6 3 14 5
7 4 14 4
8 4 11 3
9 4 12 4
编辑:另一种避免的方法groupby.transform
是对loc
valge
大于 4 的行和列 uid,value_counts
在其上使用并在 2 处获得 True ge
。然后map
返回 uid 列以在 df 上创建布尔过滤器。相同的结果并且可能更快。
df[df['uid'].map(df.loc[df['val'].ge(4), 'uid'].value_counts().ge(2))]
推荐阅读
- visual-studio-code - 如何使用多个 extensionDevelopmentPath 源启动 VSCode?
- ubuntu - VirtualBox:Ubuntu:Maven org.apache.maven.plugins:maven-install-plugin:2.4 或其依赖项之一无法解析
- php - PHP - 获取多维数组范围之间的数组元素
- jmeter - 在 jmeter 中使用 XPATH - 基于父级
- amazon-web-services - 按月显示所有正在运行的实例
- angularjs - 如何使用回调重构链接的 $http 调用和库调用
- scala - 为什么我不能在我的程序中使用 UpdateStateByKey?
- scipy - scipy.linalg.lu() 与 scipy.linalg.lu_factor()
- html - 居中的文本和对齐
- python - Pandas:如果其中任何行包含特定值,我如何删除具有相同唯一 ID 的任何行