使用pandas查找另一列唯一出现的列数

使用pandas查找另一列唯一出现的列数,pandas,Pandas,我有一张桌子: id_1 id_2 id_3 47452 IN 13 47452 IN 13 47452 IN 16 31551 GA 6 31551 GA 6 如何找到具有多个唯一出现(id\u 2和id\u 3)==1的id\u 1?(使用熊猫) 因此,此处仅应返回31551 代码: 我们可以通过在id\u 1上使用groupby来解决这

我有一张桌子:

id_1        id_2      id_3
47452       IN        13
47452       IN        13
47452       IN        16
31551       GA        6
31551       GA        6
如何找到具有多个唯一出现(
id\u 2
id\u 3
)==1的
id\u 1
?(使用
熊猫

因此,此处仅应返回31551

代码:


我们可以通过在
id\u 1
上使用groupby来解决这个问题,然后根据
id\u 2
id\u 3
获得每个组的唯一行数

最后,我们可以筛选出具有一个唯一行的组:

m = df.groupby('id_1')['id_2','id_3'].transform('nunique').eq(1).all(axis=1)
df[m]
输出

    id_1 id_2  id_3
3  31551   GA     6
4  31551   GA     6
array([31551])

如果要返回
id_1
的值:

df[m]['id_1'].unique()
输出

    id_1 id_2  id_3
3  31551   GA     6
4  31551   GA     6
array([31551])

我们可以通过在
id\u 1
上使用groupby来解决这个问题,然后根据
id\u 2
id\u 3
获得每个组的唯一行数

最后,我们可以筛选出具有一个唯一行的组:

m = df.groupby('id_1')['id_2','id_3'].transform('nunique').eq(1).all(axis=1)
df[m]
输出

    id_1 id_2  id_3
3  31551   GA     6
4  31551   GA     6
array([31551])

如果要返回
id_1
的值:

df[m]['id_1'].unique()
输出

    id_1 id_2  id_3
3  31551   GA     6
4  31551   GA     6
array([31551])

您的问题的解决方案之一可以通过使用多层次分组来实现

d = {'id_1': [47452, 47452, 47452, 31551, 31551], 'id_2': ['IN', 'IN', 'IN', 'GA', 'GA'], 'id_3': [13, 13, 16, 6, 6]}
df = pd.DataFrame(data=d)

result = df.groupby(['id_1','id_2','id_3']).size().groupby(level=0).agg(['size'])

result:
      size
id_1    
31551   1
47452   2
您可以通过以下方式选择只有一个计数的id_1:

result[result['size']==1]
      size
id_1    
31551   1
此外,您还可以打印结果中所有id的列表:

result[result['size']==1].index.tolist()
output : [31551]

希望这能有所帮助。

通过使用多层次分组,您的问题可以得到一个解决方案

d = {'id_1': [47452, 47452, 47452, 31551, 31551], 'id_2': ['IN', 'IN', 'IN', 'GA', 'GA'], 'id_3': [13, 13, 16, 6, 6]}
df = pd.DataFrame(data=d)

result = df.groupby(['id_1','id_2','id_3']).size().groupby(level=0).agg(['size'])

result:
      size
id_1    
31551   1
47452   2
您可以通过以下方式选择只有一个计数的id_1:

result[result['size']==1]
      size
id_1    
31551   1
此外,您还可以打印结果中所有id的列表:

result[result['size']==1].index.tolist()
output : [31551]
希望这有帮助