基于两个不同大小的dataframe更新列,并更新第一个dataframe中的值。(python中vlookup的概念)

基于两个不同大小的dataframe更新列,并更新第一个dataframe中的值。(python中vlookup的概念),python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我知道这似乎是一个非常普遍和重复的问题,但我无法找到最适合我的问题的解决方案 例如,我有以下数据帧(df1): 另一个df2: product name criteria Valvoline oil winter Valvoline oil performance Valvoline oil regular Goodyear tire regular Goodyear tire performance Bosch glass

我知道这似乎是一个非常普遍和重复的问题,但我无法找到最适合我的问题的解决方案

例如,我有以下数据帧(df1):

另一个df2:

product    name    criteria
Valvoline  oil     winter
Valvoline  oil     performance
Valvoline  oil     regular
Goodyear   tire    regular
Goodyear   tire    performance
Bosch      glass   regular
预期数据帧为:

receipt  car     parts   product
101      A       oil     Valvoline
102      B       tire    Goodyear
103      B       oil     Valvoline      
104      C       glass   Bosch
我确实尝试过合并,但df1中的总长度已更改

data_copy = pd.merge(df1, df2, how= "left", left_on = 'parts', right_on = 'name' )
我想从df2和join df1创建一个唯一的列表。但是还有其他优雅的方式吗

谢谢你试试这个

df['criteria'] = df1.parts.map(df2.drop_duplicates('name')
                                  .set_index('name')['product'])
或:

试试这个

df['criteria'] = df1.parts.map(df2.drop_duplicates('name')
                                  .set_index('name')['product'])
或:


@Andy的方法更适合填充单个列,如果使用
merge

pd.merge(df1, 
       df2[['name','product']].drop_duplicates().rename(columns={"name":"parts"}),
       how= "left", on="parts" )


@Andy的方法更适合填充单个列,如果使用
merge

pd.merge(df1, 
       df2[['name','product']].drop_duplicates().rename(columns={"name":"parts"}),
       how= "left", on="parts" )

   receipt car  parts    product
0      101   A    oil  Valvoline
1      102   B   tire   Goodyear
2      103   B    oil  Valvoline
3      104   C  glass      Bosch