python - 布尔掩码 Groupby Any 和 Create Indicator
问题描述
我有以下格式的熊猫数据框:
id,criteria_1,criteria_2,criteria_3,criteria_4,criteria_5,criteria_6
1,0,0,95,179,1,1
1,0,0,97,185,NaN,1
1,1,2,92,120,1,1
2,0,0,27,0,1,NaN
2,1,2,90,179,1,1
2,2,5,111,200,1,1
3,1,2,91,175,1,1
3,0,8,90,27,NaN,NaN
3,0,0,22,0,NaN,NaN
我有来自Python PANDAS 的以下程序: GroupBy First Transform Create Indicator:
mask = (((df['criteria_1'] >=1.0) | (df['criteria_2'] >=2.0)) &
(df['criteria_3'] >=90.0) &
(df['criteria_4'] <=180.0) &
((df['criteria_5'].notnull()) & (df['criteria_6'].notnull())))
# reset_index() defaults to drop=False. It inserts the old index into the DF
# as a new column named 'index'.
idx = df.reset_index()[mask].groupby('id').first().reset_index(drop=True)['index']
df['flag'] = df.index.isin(idx).astype(int)
但是,现在我想选择组满足条件的任何行,而不仅仅是第一行。它似乎不像用 .any() 或 .all() 代替 .first() 那样简单。任何故障排除提示将不胜感激!
解决方案
您可以mask
直接使用提取所有符合您条件的行:
df['flag'] = mask.astype(int)
请记住,这mask
只是一个系列,它为每一行返回一个布尔值,具体取决于是否满足所有条件。
推荐阅读
- react-native - React Native 在键盘显示时显示不同的组件
- android-studio - 应用发布时的 Google Playstore 权限错误
- python - ValueError:模型的特征数量必须与输入匹配 - 总是比模型需要的少一
- gitlab-ci - gitlab-runner 构建目录位置不尊重 LaunchAgent (macos)
- asp.net-core - 无法先使用 EF Core 代码将“子类”对象插入数据库
- awk - 使用 AWK 或 SED,在 regexp 之前添加带分号的行
- windows - 批处理文件无法一致地创建日志文件
- spring-boot - Spring Boot 应用程序未从 Spring Cloud Config Server 读取属性值
- python - 我需要哪一行代码来找到 monthTotal、monthAverage 和 numDays?
- javascript - setState 回调不等待状态更新