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

时间:2019-06-30 10:11:03

标签: pandas

我有一张桌子:

id_1        id_2      id_3
47452       IN        13
47452       IN        13
47452       IN        16
31551       GA        6
31551       GA        6

我如何找到id_1的唯一出现次数({id_2id_3)== 1的情况? (使用pandas

因此,此处应仅返回31551。

代码:

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

2 个答案:

答案 0 :(得分:2)

我们可以通过在id_1上使用groupby来解决此问题,然后根据id_2id_3获得每个组的唯一行数。

最后,我们可以过滤出具有1个唯一行的组:

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

如果您想找回id_1的值:

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

输出

array([31551])

答案 1 :(得分:2)

使用多级分组依据可以解决您的问题之一

builder.Register<IDbContext>(c => new DBObjectContext(c.Resolve<ConnectionStringAccessor >().GetConnecionString()).InstancePerLifetimeScope();

您可以通过以下方式选择仅包含一个计数的id_1:

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的列表:

result[result['size']==1]
      size
id_1    
31551   1

希望这会有所帮助。