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

获取pandas数据帧的唯一列对

  •  2
  • beta  · 技术社区  · 7 年前

    我有一个熊猫数据框,如下所示:

    name1   country1    name2   country2
    A       GER         B       USA
    C       GER         E       GER
    D       GER         Y       AUS
    E       GER         A       USA
    

    我想得到一个有两列的新数据帧 name country 包含唯一的 (name1, country1) (name2,country2) .

    预期结果如下所示:

    name    country 
    A       GER     
    C       GER     
    D       GER     
    E       GER     
    B       USA
    A       USA
    Y       AUS
    

    我在单列中发现了类似的情况 here . 然而,我不知道如何将此解决方案转换为我的问题,即成对列。

    1 回复  |  直到 7 年前
        1
  •  4
  •   jezrael    7 年前

    第一个筛选列依据 filter ,转换、展平值并创建新的 DataFrame

    a = df.filter(like='name').values.T.ravel()
    b = df.filter(like='country').values.T.ravel()
    df = pd.DataFrame({'name':a, 'country':b}, columns=['name','country'])
    print (df)
      name country
    0    A     GER
    1    C     GER
    2    D     GER
    3    E     GER
    4    B     USA
    5    E     GER
    6    Y     AUS
    7    A     USA
    

    另一个具有未记录函数的解决方案 lreshape :

    df = pd.lreshape(df, {'name':['name1','name2'],
                          'country':['country1','country2']})
    print (df)
      name country
    0    A     GER
    1    C     GER
    2    D     GER
    3    E     GER
    4    B     USA
    5    E     GER
    6    Y     AUS
    7    A     USA
    

    drop_duplicates :

    df = df.drop_duplicates()
    print (df)
      name country
    0    A     GER
    1    C     GER
    2    D     GER
    3    E     GER
    4    B     USA
    6    Y     AUS
    7    A     USA