代码之家  ›  专栏  ›  技术社区  ›  techkuz

使用panda查找其他列的唯一出现列数

  •  1
  • techkuz  · 技术社区  · 5 年前

    我有一张桌子:

    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))
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Erfan    5 年前

    我们可以使用groupby on解决这个问题 id_1 然后根据 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
    

    如果你想得到 ID1 背部:

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

    产量

    array([31551])
    
        2
  •  1
  •   cody    5 年前

    解决问题的方法之一是使用多级分组

    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]
    

    希望这有帮助。