在其他列中查找包含多个值的行
Find the row that contain multiple values in other column
问题
我有一个包含两列的数据框:NO
和 CODE
。我试图找到包含两种类型的 CODE
的 NO
。我怎样才能做到?
代码如下:
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 and 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
问题
我有一个包含两列的数据框:NO
和 CODE
。我试图找到包含两种类型的 CODE
的 NO
。我怎样才能做到?
代码如下:
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 and 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