python - 如何根据对应的值过滤df
问题描述
我有一个 df 如下:
data = {'retailer': [2, 2, 2, 2, 2, 5, 5, 5, 5, 5],
'store': [1, 1, 1, 1, 1, 7, 7, 7, 7, 7],
'week':[2021110701, 2021101301, 2021100601, 2021092901, 2021092201, 2021110701, 2021101301, 2021100601, 2021092901, 2021092201],
'isPeriod': [False, True, False, False, False, False, False, True, False, False],
'quadId': [2021112804, 2021103104, 2021103104, 2021103104, 2021103104, 2021100304, 2021100304, 2021103104, 2021103104, 2021103104]
}
data = pd.DataFrame(data)
我想找到'isPeriod' == True的位置,获取'isPeriod'为True的相应'quadId'值,然后过滤我的整个数据框以仅具有相应的'quadId'。
例如,在我的 df 中,我们可以看到在第二行中,“isPeriod”为 True,对应的“quadId”为 2021103104。所以我希望过滤后的 df 仅包含“quadId”为 2021103104 的行。
在这种情况下,我的示例过滤 df 看起来像:
data = {'retailer': [2, 2, 2, 2, 5, 5, 5],
'store': [1, 1, 1, 1, 7, 7, 7],
'week':[2021101301, 2021100601, 2021092901, 2021092201, 2021100601, 2021092901, 2021092201],
'isPeriod': [True, False, False, False, True, False, False],
'quadId': [2021103104, 2021103104, 2021103104, 2021103104, 2021103104, 2021103104, 2021103104]
}
data = pd.DataFrame(data)
有没有办法我可以做到这一点?谢谢!(同样,如果 isPeriod 有多个 True 值,quadId 对它们来说都是相同的)
解决方案
用于isin
检查是否存在,然后loc
:
valid_quarters = data.loc[data.isPeriod, 'quadId']
data[data['quadId'].isin(valid_quarters)]
输出:
retailer store week isPeriod quadId
1 2 1 2021101301 True 2021103104
2 2 1 2021100601 False 2021103104
3 2 1 2021092901 False 2021103104
4 2 1 2021092201 False 2021103104
7 5 7 2021100601 True 2021103104
8 5 7 2021092901 False 2021103104
9 5 7 2021092201 False 2021103104
推荐阅读
- react-router - Material-ui 中 AppBar 内的 MenuItem 导航
- apache-spark - 使用 Pyspark 读取弹性搜索索引
- macos - 跟踪最后按下的键
- mysql - MYSQL数据库查询-reg
- video - 视频中的平均内容距离是什么意思?
- android - 颤动的 Image.network 无法在发布 apk 上运行
- php - 在 php 中按表从 mysql 显示组
- wso2 - 如何在 WSO2 IS 的 XACML 策略中使用 client_ip 和 request_uri
- android - 为什么在 android mobile version 8.1 [oreo] Floating Widget 服务不工作?[应用程序越来越崩溃]
- php - Laravel 5.7 Multilogin SendEmailVerificationNotification 错误