我有一张桌子:
id_1 id_2 id_3
47452 IN 13
47452 IN 13
47452 IN 16
31551 GA 6
31551 GA 6
我如何找到id_1
的唯一出现次数({id_2
和id_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))
答案 0 :(得分:2)
我们可以通过在id_1
上使用groupby来解决此问题,然后根据id_2
和id_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
希望这会有所帮助。