2017-11-27 5 views
2

을 병합하므로 offer_codes라는 열에 병합하려는 데이터 프레임이 두 개 있습니다. 모든 행에는 목록에 여러 제안 코드가 있습니다 (아마도 튜플로 변환 할 수 있습니다) 제안 코드를 두 번째 데이터 프레임과 일치시키고이를 병합하려고합니다. 데이터 프레임 중 하나가 목록을 반환하고 다른 하나는 값 하나이지만 병합하여 병합하려고합니다. 데이터 프레임은 웹 사이트의 판매 데이터에서 가져옵니다.팬더의 열을 비교하고

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]}) 

나는이 병합 싶습니다하지만 내 문제는 내가 정확히 일치하지 않는 것 튜플과 합병 할 때 목록이 unhashable 있다는 것입니다.

#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