2017-11-18 16 views
1

の列のユニークなペアを取得します:私は(name1, country1)のユニークなペアを含む2列namecountryを持つ新しいデータフレームを取得したい私は次のように見えるパンダのデータフレームを持っているパンダのデータフレーム

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

(name2,country2)

期待される結果は次のようになります。

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

私は、単一の列hereのための同様のものを発見しました。しかし、私はこの解決法を私の問題、すなわち列の対に変換する方法を知らない。 filterによって

答えて

1

まずフィルタ列、転置値を平らにし、コンストラクタによって新しい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

関連する問題