2017-06-30 10 views
1

私は共通のIDでいくつかのExcelシートを結合したいと思っているpython pandasには新しいです。また、そこには一対一の関係があります。パンダの列を1対多にマージする

DF1

<b>ID  Name</b><br/> 
3763058 Andi<br/> 
3763077 Mark 

DF2:

<b>ID Tag</b><br/> 
3763058 item1 <br/> 
3763058 item2<br/> 
3763058 item3<br/> 
3763077 item_4<br/> 
3763077 item_5<br/> 
3763077 item_6 

私は今にDF1とDF2 2匹のパンダのデータフレームをマージしたいここで

が入力されています次の出力(列タグはIDごとに単一の列にマージされます):

<b>ID Name Tag</b><br/> 
3763058 Andi item1, item2, item3<br/> 
3763077 Mark item_4, item_5, item_6<br/> 

誰でも私にこれを手伝ってもらえますか?あなたがjoinで最初groupbyを使用することができます

乾杯、 アンディ

+0

、忘れないでください[受け入れる](http://meta.stackexchange.com/a/5235/ 295067)それは答えの横にあるチェックマーク( '✓')をクリックすると、グレーアウトから塗りつぶしに切り替わります。ありがとう。 – jezrael

答えて

2

df2 = df2.groupby('ID')['Tag'].apply(', '.join).reset_index() 
print (df2) 
     ID      Tag 
0 3763058  item1, item2, item3 
1 3763077 item_4, item_5, item_6 

その後df1は、より多くの列がある場合は特に、使用可能性mergeです:map

df = pd.merge(df1, df2, on='ID', how='left') 
print (df) 
     ID Name      Tag 
0 3763058 Andi  item1, item2, item3 
1 3763077 Mark item_4, item_5, item_6 

ソリューション1つの列のみを追加する必要がある場合:

df2 = df2.groupby('ID')['Tag'].apply(', '.join).reset_index() 
df2['Name'] = df2['ID'].map(df1.set_index('ID')['Name']) 
print (df2) 
     ID      Tag Name 
0 3763058  item1, item2, item3 Andi 
1 3763077 item_4, item_5, item_6 Mark 

Name列の重要な位置をinsert使用する場合:私の答えは参考になりました場合は

df2 = df2.groupby('ID')['Tag'].apply(', '.join).reset_index() 
df2.insert(1, 'Name', df2['ID'].map(df1.set_index('ID')['Name'])) 
print (df2) 
     ID Name      Tag 
0 3763058 Andi  item1, item2, item3 
1 3763077 Mark item_4, item_5, item_6 
関連する問題