2016-04-15 5 views
0

;これは、NaN値になりは、データフレームの列に任意の値をマージし、私は次の「単位」欄に任意の列にマージしようとしている

from pandas import DataFrame 
import pandas as pd 
import difflib 

df1 = DataFrame([[1,'034567','Foo'], 
       [2,'1cd2346','Bar']], 
       columns=['UID','Unit','Name']) 

df2 = DataFrame([['SellTEST','0ab1234567,034567'], 
       ['superVAR','1cd2346']], 
       columns=['Seller', 'Unit']) 

merge2_df = pd.merge(df1, df2, on=['Unit'], how='left') 
merge2 

UID  Unit Name Seller 
0 1  034567 Foo  NaN 
1 2  1cd2346 Bar  superVAR 

私が見てみたいことはあるとき:

UID  Unit Name Seller 
0 1  034567 Foo  SellTEST 
1 2  1cd2346 Bar  superVAR 

私はCSVからデータをインポートしていますので、いくつかのフィールドは、国連の複数の値が含まれますそれ'。理想的には、私はマージ中にこれを処理できるようにしたいと思います。助言がありますか?

+0

DF2の最初のユニットは「034567」ではないので、その代わりに、それは素晴らしいことだそうだ0ab1234567,034567 " –

答えて

2

Unitデータをdf2の単数行に分割する必要があります。たとえば、0ab1234567,034567の行は行になります。その後、pd.mergeを適用することができます。

In [112]: df2split = pd.DataFrame(df2['Unit'].str.split(',').tolist(), 
            index=df2['Seller']).stack() 

In [113]: df2split = df2split.reset_index()[[0, 'Seller']] 

In [114]: df2split.columns = ['Unit', 'Seller'] 

In [115]: df2split 
Out[115]: 
     Unit Seller 
0 0ab1234567 SellTEST 
1  034567 SellTEST 
2  1cd2346 superVAR 

In [116]: pd.merge(df1, df2split, on=['Unit'], how='left') 
Out[116]: 
    UID  Unit Name Seller 
0 1 034567 Foo SellTEST 
1 2 1cd2346 Bar superVAR 
+0

では、NaNを取得します!魅力のように働く - ありがとう。 df2に2つ以上のカラムがある場合、どのように同じ結果が得られますか?私は、追加の列が削除されると思われる。 – FunnyChef