首页 > 解决方案 > 在另一列中查找包含多个值的行

问题描述

问题

我有一个包含两列的数据框:NOCODE. 我试图找到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

任何帮助将不胜感激。

标签: pythonpandaspython-3.6

解决方案


使用transformnunique获取每个 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

推荐阅读