获取 pandas 数据帧的唯一列对

bet*_*eta 3 unique multiple-columns dataframe pandas

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

name1   country1    name2   country2
A       GER         B       USA
C       GER         E       GER
D       GER         Y       AUS
E       GER         A       USA
Run Code Online (Sandbox Code Playgroud)

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

预期结果应如下所示:

name    country 
A       GER     
C       GER     
D       GER     
E       GER     
B       USA
A       USA
Y       AUS
Run Code Online (Sandbox Code Playgroud)

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

jez*_*ael 5

首先通过 、转置、展平值过滤列filterDataFrame通过构造函数创建新值:

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
Run Code Online (Sandbox Code Playgroud)

另一个具有未记录功能的解决方案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
Run Code Online (Sandbox Code Playgroud)

最后对于独特的对使用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
Run Code Online (Sandbox Code Playgroud)