python - 根据组过滤 DataFrame 行
问题描述
我正在使用具有以下结构的 DataFrame 学习 Python/Pandas:
import pandas as pd
df = pd.DataFrame({"cus_id" : ["2370", "2370", "5100", "5100", "8450", "8450", "1630", "1630", "1630"],
"cus_group" : ["A", "A", "A", "B", "B", "B", "A", "A", "B"]})
print(df)
cus_id cus_group
0 2370 A
1 2370 A
2 5100 A
3 5100 B
4 8450 B
5 8450 B
6 1630 A
7 1630 A
8 1630 B
我的目标是过滤上述 DataFrame 的行。具体来说,我只想保留客户属于不同组的行。这是我的尝试:
print(df.drop_duplicates(subset = ["cus_id", "cus_group"], keep = False))
cus_id cus_group
2 5100 A
3 5100 B
8 1630 B
不幸的是,这不是我正在寻找的确切输出。请注意,cus_id
= 1630
在原始 DataFrame 中出现了 3 次:在 group 中出现了 2 次,在 group 中出现了A
1 次B
。由于它属于两个不同的组(A
和B
),因此我不想删除该客户的任何行。也就是说,我正在寻找的输出如下:
cus_id cus_group
2 5100 A
3 5100 B
6 1630 A
7 1630 A
8 1630 B
我不确定我缺少什么功能来实现我的目标。任何额外的帮助将不胜感激。
解决方案
使用groupby
and transform
asnunique
这将唯一计数作为一个系列,然后只需过滤大于 1:
df[df.groupby('cus_id')['cus_group'].transform('nunique')>1]
cus_id cus_group
2 5100 A
3 5100 B
6 1630 A
7 1630 A
8 1630 B
推荐阅读
- ios - 无法在 SwiftUI 中实现 Apple Pay
- javascript - Dhtmlx Gantt 在 XAMPP 工作但不是 VPS 服务器
- postgresql - 在 docker-entrypoint-initdb.d 中运行脚本后,docker-compose postgres 重新启动
- javascript - useRef 挂钩中的“当前”键是什么?
- python - Python C API - PyDict - 是否需要对值和键进行引用计数?
- python - 使用 asyncpg 时如何修复异步代码锁定
- ios - 协议类型“名称”的值不能符合具有通用功能的协议“名称”
- firebase - Vuejs 路由器和 Firebase
- python - 一象限python的具体值
- java - 尝试在 Java 中运行 Selenium 时出错