Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较pandas和merge中的列_Python_Python 3.x_Pandas_Merge - Fatal编程技术网

Python 比较pandas和merge中的列

Python 比较pandas和merge中的列,python,python-3.x,pandas,merge,Python,Python 3.x,Pandas,Merge,所以我有两个数据帧,我想合并到一个名为offer_code的列中。所有行在一个列表中都有多个提供代码(我可能会将其转换为元组),我希望将提供代码与第二个数据帧匹配,并在它们上合并。其中一个数据帧返回一个列表,另一个只是一个值,但我想合并它,以便它合并。数据框来自网站的销售数据 df = pd.DataFrame(data={'available': [False, True, True], 'count': [190,285,165],

所以我有两个数据帧,我想合并到一个名为offer_code的列中。所有行在一个列表中都有多个提供代码(我可能会将其转换为元组),我希望将提供代码与第二个数据帧匹配,并在它们上合并。其中一个数据帧返回一个列表,另一个只是一个值,但我想合并它,以便它合并。数据框来自网站的销售数据

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
我原以为把列表放入元组会有效果,但事实并非如此

有点长

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

最后一点,你可以省略how='left',这样你就不必
dropna()
,对吗?