2017-11-27 2 views
2

になるので、offer_codesという列にマージしたいデータフレームが2つあります。すべての行にはリスト内に複数のオファーコードがあります(おそらくそれをタプルに変換できます)。オファーコードを2番目のデータフレームとマージしてマージする必要があります。データフレームの1つはリストを返し、もう1つは値だけですが、マージするようにマージしたいと思います。データフレームは、ウェブサイトの販売データから得られます。pandasの列を比較して

df = pd.DataFrame(data={'available': [False, True, True], 
         'count': [190,285,165], 
         'offer_codes': ['no_offer_code',['G545', 'G1891'],['G92182', 'G1921']]}) 
df2 = pd.DataFrame(data={'price':[85.00,99.00], 
         'offer_codes':['G1891', 'G1921'], 
         'after_fees':[105, 121]}) 

私はこれらを統合したいと思いますが、私の問題は、私が正しく一致していないようだタプルと合併しようとすると、リストが非ハッシュであるということです。

#first df 
    available count  offer_codes 
0  False 190 no_offer_code 
1  True 285 [G545, G1891] 
2  True 165 [G92182, G1921] 
#2nd df 
    after_fees offer_codes price 
0   105  G1891 85.0 
1   121  G1921 99.0 
#after the merge 
    after_fees available count offer_codes price 
0   105  True 285  G1891 85.0 
1   121  True 165  G1921 99.0 

リストをタプルに入れることはうまくいくと思いますが、間違いなくありませんでした。

答えて

0
少し長い

..

df.set_index(['available','count']).offer_codes.apply(pd.Series).stack().\ 
     to_frame('offer_codes').\ 
      reset_index(level['count','available']).\ 
      merge(df2,on='offer_codes',how='left').dropna() 
Out[59]: 
    available count offer_codes after_fees price 
2  True 285  G1891  105.0 85.0 
4  True 165  G1921  121.0 99.0 
+0

ことの最後のピースあなたはどのように= 'left'' 'だけ省略することができ、あなたが' dropna(する必要がないようにそれはそれを行います) '、そう? –

+0

@MattW。うん、あなたは正しいです – Wen

関連する問題