我想根据两个不同列上的两个条件过滤数据帧。在下面的示例中,我希望过滤数据帧df
以包含行,从而使其包含的uid
的值计数大于4的val
列大于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的uid
行数大于或等于2的val
行
您需要使用
groupby.transform
和sum
检查val大于或等于ge
的地方。并检查结果是否为ge
,以将其用作df上的布尔过滤器编辑:另一种避免
groupby.transform
的方法是loc
val大于4的行和列uid,在其上使用value_counts
,并在ge
2处获得True。然后map
返回uid列,在df上创建布尔过滤器。同样的结果,可能更快相关问题 更多 >
编程相关推荐