Python 如何比较来自两个不同数据帧的列并保留来自第一个数据帧的值?

Python 如何比较来自两个不同数据帧的列并保留来自第一个数据帧的值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个不同大小的数据帧。它们都有四列:Words、x、y和z 但是,当连接这两个数据帧时,我希望保持相似单词的x、y、z值。保留df1中不存在但df2中存在的单词 我尝试使用pd.merge,但这将保留这两个值,并且只保留相似的单词。如果我使用pd.concat,我必须删除类似的元素,但不会从第一个数据帧删除 样品 df1=pd.DataFrame{'Words': [‘土豚’、‘鲍鱼’、‘抛弃’], “x”:[0.999,0.888,0.777], ‘y’:[0.999,0.888,0.77

我有两个不同大小的数据帧。它们都有四列:Words、x、y和z

但是,当连接这两个数据帧时,我希望保持相似单词的x、y、z值。保留df1中不存在但df2中存在的单词

我尝试使用pd.merge,但这将保留这两个值,并且只保留相似的单词。如果我使用pd.concat,我必须删除类似的元素,但不会从第一个数据帧删除

样品 df1=pd.DataFrame{'Words': [‘土豚’、‘鲍鱼’、‘抛弃’], “x”:[0.999,0.888,0.777], ‘y’:[0.999,0.888,0.777], ‘z’:[0.999,0.888,0.777]} df2=pd.DataFrame{'Words': [‘aaaaahh’、‘土豚’、‘鲍鱼’、‘抛弃’、‘动物园’、‘缩放’、‘西葫芦’], "x":[0.199,0.111,0.222,0.333,0.232,0.842,0.945],, ‘y’:[0.929,0.111,0.222,0.333,0.112,0.62,0.265], ‘z’:[0.993,0.111,0.222,0.333,0.212,0.344,0.745]} 预期产量 df_res=pd.DataFrame{'Words': [‘aaaaahh’、‘土豚’、‘鲍鱼’、‘抛弃’、‘动物园’、‘缩放’、‘西葫芦’], “x”:[0.199,0.999,0.888,0.777,0.232,0.842,0.945], ‘y’:[0.929,0.999,0.888,0.777,0.112,0.62,0.265], ‘z’:[0.993,0.999,0.888,0.777,0.212,0.344,0.745]} 我试过的 作为pd进口熊猫 合并 df_res=pd.mergedf1,df2,on='Word',how='inner' 连接两个字符串 df_concat=pd.concatobjs=[df1,df2],ignore_index=True df_concat=pd.drop_duplicatesubset=['Word'],keep=False,ignore_index=True 比较 d_res=d1[d1['Word']!=d1['Word']] ValueError:只能比较标签相同的系列对象 您可以使用df.append将df1追加到df2,然后使用keep='last'删除重复项,然后对索引进行排序并重置索引:

您可以使用df.append将df1追加到df2,然后使用keep='last'删除重复项,然后对索引进行排序并重置索引:


也许性能不如@Sayandip Dutta answer,您可以尝试右连接或左连接,具体取决于您在pd.merge中放置参数的顺序:

在[4]:res=pd.mergedf1,df2,how='right',on='Words',后缀=_1,_2 在[5]中:res 出[6]: 单词x_1 y_1 z_1 x_2 y_2 z_2 0土豚0.999 0.999 0.999 0.111 0.111 0.111 1只鲍鱼0.888 0.888 0.888 0.222 0.222 0.222 2放弃0.777 0.777 0.777 0.333 0.333 0.333 3 AAAAA Hh NaN NaN 0.199 0.929 0.993 4动物园南0.232 0.112 0.212 5缩放NaN 0.842 0.620 0.344 6西葫芦南0.945 0.265 0.745 然后可以用x_2、y_2和z_2的值填充x_1、y_1、z_1的na

在[8]中:res.x_1.fillnares.x_2,inplace=True 在[8]中:res.y_1.fillnares.y_2,inplace=True 在[9]中:res.z_1.fillnares.z_2,inplace=True 在[10]中:df_res=res[[Words,x_1,y_1,z_1]] In[11]:df_res 出[11]: 单词x_1 y_1 z_1 0土豚0.999 0.999 0.999 1只鲍鱼0.888 0.888 0.888 2放弃0.777 0.777 0.777 3 AAAA HH 0.199 0.929 0.993 4动物园0.232 0.112 0.212 5变焦0.842 0.620 0.344 6西葫芦0.945 0.265 0.745
也许性能不如@Sayandip Dutta answer,您可以尝试右连接或左连接,具体取决于您在pd.merge中放置参数的顺序:

在[4]:res=pd.mergedf1,df2,how='right',on='Words',后缀=_1,_2 在[5]中:res 出[6]: 单词x_1 y_1 z_1 x_2 y_2 z_2 0土豚0.999 0.999 0.999 0.111 0.111 0.111 1只鲍鱼0.888 0.888 0.888 0.222 0.222 0.222 2放弃0.777 0.777 0.777 0.333 0.333 0.333 3 AAAAA Hh NaN NaN 0.199 0.929 0.993 4动物园南0.232 0.112 0.212 5缩放NaN 0.842 0.620 0.344 6西葫芦南0.945 0.265 0.745 然后可以用x_2、y_2和z_2的值填充x_1、y_1、z_1的na

在[8]中:res.x_1.fillnares.x_2,inplace=True 在[8]中:res.y_1.fillnares.y_2,inplace=True 在[9]中:res.z_1.fillnares.z_2,inplace=True 在[10]中:df_res=res[[Words,x_1,y_1,z_1]] In[11]:df_res 出[11]: 单词x_1 y_1 z_1 0土豚0.999 0.999 0.999 1只鲍鱼0.888 0.888 0.888 2放弃0.777 0.777 0.777 3 AAAA HH 0.199 0.929 0.993 4动物园0.232 0.112 0.212 5变焦0.842 0.620 0.344 6西葫芦0.945 0.265 0.745
>>> (df2.append(df1)
        .drop_duplicates('Words', keep='last')
        .sort_index()
        .reset_index(drop=True))

      Words      x      y      z
0   aaaaahh  0.199  0.929  0.993
1  aardvark  0.999  0.999  0.999
2   abalone  0.888  0.888  0.888
3   abandon  0.777  0.777  0.777
4       zoo  0.232  0.112  0.212
5      zoom  0.842  0.620  0.344
6  zucchini  0.945  0.265  0.745