2017-11-18 249 views
1

我有一个熊猫数据帧,看起来如下:得到一个大熊猫数据帧的列的唯一对

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

第一过滤列由filter,移调,压平值,并通过构造函数创建新DataFrame

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 

而去年为唯一对:

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另一种解决方案使用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 
+0

哪个解决方案比较好? – beta

+1

首先是我认为更快 – jezrael