获取pandas数据帧的唯一列对

时间:2017-11-18 09:34:46

标签: pandas dataframe unique multiple-columns

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

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

我希望获得一个包含两列namecountry的新数据框,其中包含唯一的(name1, country1)(name2,country2)对。

预期结果应如下所示:

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

我在单列here中找到了类似的内容。但是,我不知道如何将此解决方案转换为我的问题,即成对的列。

1 个答案:

答案 0 :(得分:2)

首先按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
相关问题