pandas - 根据同一数据框中的其他行从数据框中删除行
问题描述
我有一个看起来像这样的数据框:
date | test_hour
------------+-----------
2000-01-01 | 1
2000-01-01 | 2
2000-01-01 | 3
2000-01-02 | 1
2000-01-02 | 2
2000-01-02 | 3
2000-01-02 | 4
2000-01-03 | 1
2000-01-03 | 2
我需要删除所有缺少 test_hours= 1、2 和 3 的日期。因此,生成的数据框不应包含带有2000-01-03
的行,因为它缺少test_hour
= 3:
date | test_hour
------------+-----------
2000-01-01 | 1
2000-01-01 | 2
2000-01-01 | 3
2000-01-02 | 1
2000-01-02 | 2
2000-01-02 | 3
2000-01-02 | 4
我目前正在使用 for 循环来确定要删除的日期,但这似乎违背了使用数据框的目的。有什么更有效的方法来做到这一点?
解决方案
这是filter
与isin
and一起使用的一种方法all
df.groupby('date').filter(lambda x : pd.Series([1,2,3]).isin(x['test_hour']).all())
date test_hour
0 2000-01-01 1
1 2000-01-01 2
2 2000-01-01 3
3 2000-01-02 1
4 2000-01-02 2
5 2000-01-02 3
6 2000-01-02 4
推荐阅读
- r - 在 rstudio 中用 lapply 和 gsub 替换特殊字符
- php - IPinfo 如何使用 file_get_contents 显示 json 数据
- android - 无法解析 intellijIdea 中的符号 R
- ios - 创建没有 UI 的 iOS 操作扩展
- r - 使用 gmailr 重新登录到其他帐户
- c - 为什么 nanosleep() 会增加一个恒定的延迟,我该如何避免呢?
- c++ - 有没有办法让类递归?
- android - 注册一个 android 应用程序以接收某些文件类型
- php - 为什么要在这个 Array 中添加一个新的 Array Object?
- c - 如何从 C 中的 HTTP 服务器下载并保存文件