python - 在另一列中查找包含多个值的行
问题描述
问题
我有一个包含两列的数据框:NO
和CODE
. 我试图找到NO
包含两种类型的CODE
. 我怎样才能做到?
代码如下所示:
import pandas as pd
df = pd.DataFrame({'NO': ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'f', 'f'], 'CODE': ['1', '1', '1', '1', '4', '1', '4', '1', '4', '4', '1', '4', '1']})
Out[1]:
NO CODE
0 a 1
1 a 1
2 b 1
3 b 1
4 c 4
5 c 1
6 d 4
7 d 1
8 e 4
9 e 4
10 e 1
11 f 4
12 f 1
预期结果
NO CODE
c 4
c 1
d 4
d 1
e 4
e 4
e 1
f 4
f 1
任何帮助将不胜感激。
解决方案
使用transform和nunique获取每个 NO 的 CODE 唯一值的数量。
仅保留大于 1 的行并删除转换列。
df['gt_1'] = df.groupby('NO').CODE.transform('nunique')
df.query('gt_1 > 1').drop('gt_1',axis=1).reset_index(drop=True)
NO CODE
0 c 4
1 c 1
2 d 4
3 d 1
4 e 4
5 e 4
6 e 1
7 f 4
8 f 1
另一种选择:使用 groupby 中的filter函数仅获取唯一值大于 1 的行,然后使用 iloc 方法仅提取符合条件的行。
check = df.groupby('NO').CODE.filter(lambda x:x.nunique()>1).index
df.iloc[check]
NO CODE
4 c 4
5 c 1
6 d 4
7 d 1
8 e 4
9 e 4
10 e 1
11 f 4
12 f 1
推荐阅读
- node.js - 将 CRA 部署到 Heroku 后如何运行部署后脚本命令?
- java - if 语句只能正常工作一次
- java - 在android中创建剥离的TableTows
- node.js - 意味着全栈应用程序未部署在 Heroku 应用程序错误上
- javascript - 如何使用 discord.js 获取不和谐服务器的成员数
- json - ValueQuerySet 的 Django 序列化
- java - Java - 为什么我的变量在 Java 中显示为 0?
- php - 如何在 tFPDF 中支持印地语字体
- flutter - 我怎样才能避免在颤动中再次加载相同的屏幕?
- ios - 有什么方法可以使用特定于应用程序的密码来检索 Apple DSID?