2017-05-12 9 views
2

私は2つのデータフレームを持ち、そのうちの1つにサッカー選手に関する一般的な情報が含まれています。どちらも "id"列を持っています。しかし、彼らは同じ長さではありません。別の列に従って2つのデータフレームから列を選択

最初のデータフレームから「x」、2番目のデータフレームから「y」という2つの列を含む新しいデータフレームを作成します。「id」列には両方のデータフレームに同じ値が含まれます。したがって、私は同じ人に属する "x"列と "y"列を一致させることができます。

私はconcat関数を使用して、それを実行しようとしました:

pd.concat([firstdataframe['x'], seconddataframe['y']], axis=1, keys=['x', 'y']) 

しかし、私は、両方のデータフレームに等しい「ID」の条件を適用する方法を知って管理していませんでした。あなたが参加デフォルトinnermergeを必要とするようだ

答えて

1

は、またid列の各値は一意である必要があります:

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id') 

はサンプル:

df1 = pd.DataFrame({'id':[1,2,3],'x':[4,3,8]}) 
print (df1) 
    id x 
0 1 4 
1 2 3 
2 3 8 

df2 = pd.DataFrame({'id':[1,2],'y':[7,0]}) 
print (df2) 
    id y 
0 1 7 
1 2 0 

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id') 
print (df) 
    id x y 
0 1 4 7 
1 2 3 0 

concatとソリューションは可能ですが、ビット複雑なので、インデックスに参加する必要がありますinner参加:

df = pd.concat([df1.set_index('id')['x'], 
       df2.set_index('id')['y']], axis=1, join='inner') 
     .reset_index() 
print (df) 
    id x y 
0 1 4 7 
1 2 3 0 

EDIT:id sが一意でない場合

は、重複がすべての組み合わせを作成し、出力dataframeが展開されます。

df1 = pd.DataFrame({'id':[1,2,3],'x':[4,3,8]}) 
print (df1) 
    id x 
0 1 4 
1 2 3 
2 3 8 

df2 = pd.DataFrame({'id':[1,2,1,1],'y':[7,0,4,2]}) 
print (df2) 
    id y 
0 1 7 
1 2 0 
2 1 4 
3 1 2 

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id') 
print (df) 
    id x y 
0 1 4 7 
1 1 4 4 
2 1 4 2 
3 2 3 0 
関連する問題