2016-03-31 9 views
0

上の多くの変数にマージ:は、私はそのような<code>df</code>を持っているのpython

id_1 id_2 id_3 id_4 etc. 
001  002  003  004 

私はidと彼の試合との間の一致を見つけることができますdf_referentialと呼ばれる別のdfを、持っています。

df_referentialはそのようなものです:

id Name  
001 "Parents"  
002 " Child"  
003 "Music" 
etc. 

私はそのフォーム上のdfをしたいと思います:

id_1 Name_1 id_2 Name_2 id_3 Name_3 etc. 
001 "Parents" 002 "Child" 003 Music 

私はこのコードを試してみてください。

for x in range(1,len(df.columns)): 
    test_join_{0}.format(x)= pd.merge(pd.DataFrame(df.id_{0}.format(x)),df_referential, left_on='id{0}.format(x)',right_on='id') 

をしかし、それは動作しません。 。

多くの列でどのようにマージするか知っていますか?

Thks

+0

あなたはパンダを使用していますか?もしそうなら、それはこの質問で言及することが重要です。 –

+0

パンダを使用しているようです。もしそうなら、本当にあなたの質問にそのタグを追加する必要があります。 – jjm

+0

申し訳ありません。私はパンダを使用しています。 –

答えて

0
for i in range(len(df.columns)): 
    col = df.columns[i] 
    df = df.merge(df_referential, left_on = col, right_on = 'id', how='left', suffixes = ['', '_%s'%i]) 
+0

Thksサム、あなたのコードはほんとうに欲しいですが、新しいdfには16 000行の代わりに4行しか含まれていません。私はそれが可能な方法を理解していない。 –

+0

申し訳ありません申し訳ありませんが、問題を解決するには、 "how = 'left'をマージステートメントに追加して、dfのすべてのレコードを保持し、df_referentialに一致するレコードのみ – Sam

+0

が多くのSAMを呼び出すようにします。 あなたはnames_1 ... names_nだけを保持する方法を知っていますか? –

関連する問題