我有以下Pandas 数据框,我想要一个函数,使用groupby函数返回ID的数据,其中bool_1中至少有1个True值,bool_2列中至少有2个True值,bool_3列中有3个True值.

index  ID  bool_1  bool_2  bool_3
 0      7   True    True    True    
 1      7   False   True    True
 2      7   False   False   True
 3      8   True    True    True
 4      8   True    True    True    
 5      8   False   False   True    
 6      9   True    True    True    
 7      9   True    False   True    
 8      9   True    False   True    
 9      9   True    False   False   

作为输出,我希望返回ID 78的完整数据,因为9只有bool_2的1个True值. 对这个功能有什么 idea 吗?谢谢大家!

推荐答案

您可以在字典中指定True的数量,因此可以通过DataFrame.ge比较True的最大或相等计数,并通过boolean indexing过滤原始DataFrameSeries.isin:

d = {'bool_1':1, 'bool_2':2,'bool_3':3}

ids = df.groupby('ID')[list(d.keys())].sum().ge(d).all(axis=1)
print (ids)
ID
7     True
8     True
9    False
dtype: bool

out = df[df['ID'].isin(ids.index[ids])]
print (out)
   index  ID  bool_1  bool_2  bool_3
0      0   7    True    True    True
1      1   7   False    True    True
2      2   7   False   False    True
3      3   8    True    True    True
4      4   8    True    True    True
5      5   8   False   False    True

另一个 idea 是使用GroupBy.transform来创建布尔掩码:

d = {'bool_1':1, 'bool_2':2,'bool_3':3}

mask = df.groupby('ID')[list(d.keys())].transform('sum').ge(d).all(axis=1)
print (mask)
0     True
1     True
2     True
3     True
4     True
5     True
6    False
7    False
8    False
9    False
dtype: bool

out = df[mask]
print (out)
   index  ID  bool_1  bool_2  bool_3
0      0   7    True    True    True
1      1   7   False    True    True
2      2   7   False   False    True
3      3   8    True    True    True
4      4   8    True    True    True
5      5   8   False   False    True

Python相关问答推荐

在for循环中保存和删除收件箱

如何使用关键参数按列对Pandas rame进行排序

将numpy数组与空数组相加

如何匹配3D圆柱体的轴和半径?

如何将新的SQL服务器功能映射到SQL Alchemy的ORM

如何在矩阵上并行化简单循环?

将行从一个DF添加到另一个DF

拆分pandas列并创建包含这些拆分值计数的新列

在应用循环中间保存pandas DataFrame

使用GEKKO在简单DTE系统中进行一致初始化

如何在BeautifulSoup中链接Find()方法并处理无?

Gekko:Spring-Mass系统的参数识别

什么相当于pytorch中的numpy累积ufunc

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

PyQt5,如何使每个对象的 colored颜色 不同?'

在np数组上实现无重叠的二维滑动窗口

UNIQUE约束失败:customuser. username

python panda ExcelWriter切换动态公式到数组公式

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

合并与拼接并举