2016-12-22 5 views
1

df2の行がdf1の列に変換されるように2つのデータフレームをマージしたいとします。2つのデータフレームをマージすると最終データフレームの行が少なくなります

df1 = 

ID B 
1 3 
2 4 
3 5 

df2 = 
ID Value 
1 ABC 
1 ACD 
2 WWW 

結果は次のようになります。

result = 
    ID B A_1 A_2 
    1 3 ABC ACD 
    2 4 WWW NaN 
    3 5 NaN NaN 

問題は何があっても、私はdf1のすべての行を維持したいしながら、合併後、私は、私の本当のデータセットにdf1で一部の行を逃すことはありませんdf2で一致します。

df2['col'] = 'A_' + df2.groupby(['ID'])['Value'].cumcount().astype(str) 
df2 = df2.pivot(index='ID', columns='col', values='Value').reset_index() 
result = pd.merge(df1, df2) 

寸法:

df1 = 1404659 rows 
df2 = 1015639 rows 
result = 1216773 rows (!!!) 

2つのデータフレームのマージがデータフレームresultに少ない行を生成している理由かもしれませんか?

答えて

2

は、私は、デフォルトinnermergeに参加するので、あなたは、leftが参加必要があると思う:

result = pd.merge(df1, df2, how='left') 

別の解決策は、デフォルトleftjoinを使用している参加:

result = df1.join(df2) 
関連する問題