Python 3.x 从另一个数据帧的值填充数据帧中的新列

Python 3.x 从另一个数据帧的值填充数据帧中的新列,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有两个数据帧: pd.DataFrame(data={'col1': ['a', 'b', 'a', 'a', 'b'], 'col2': ['c', 'c', 'd', 'd', 'c'], 'col3': [1, 2, 3, 4, 5, 1]}) col1 col2 col3 0 a c 1 1 b c 2 2 a d 3 3 a d 4 4 b c 5

我有两个数据帧:

pd.DataFrame(data={'col1': ['a', 'b', 'a', 'a', 'b'], 'col2': ['c', 'c', 'd', 'd', 'c'], 'col3': [1, 2, 3, 4, 5, 1]})
   col1 col2  col3  
0    a    c     1   
1    b    c     2   
2    a    d     3   
3    a    d     4   
4    b    c     5   
5    h    i     1
pd.DataFrame(data={'col1': ['a', 'b', 'a', 'f'], 'col2': ['c', 'c', 'd', 'k'], 'col3': [12, 23, 45, 78]})
    col1 col2  col3 
0    a    c     12  
1    b    c     23  
2    a    d     45
3    f    k     78  
我想根据第二列中的col1和col2的值在第一列中建立一个新列。就是这个新的:

pd.DataFrame(data={'col1': ['a', 'b', 'a', 'a', 'b'], 'col2': ['c', 'c', 'd', 'd', 'c'], 'col3': [1, 2, 3, 4, 5],'col4' : [12, 23, 45, 45, 23]})
    col1 col2  col3  col4
0    a    c     1    12
1    b    c     2    23
2    a    d     3    45
3    a    d     4    45
4    b    c     5    23
5    h    i     1    NaN
我怎么能做到呢

请注意:)

编辑:有人建议在这个主题中寻找答案,但这不是同一个问题

在这里,不仅ID不存在,因为它在col1和col2中被分割,而且最重要的是,尽管在第二个数据帧中是唯一的,但在第一个数据帧中它不是唯一的。这就是为什么我认为合并和联接都不能解决这个问题


Edit2:此外,df1的col1和col2对在df2中可能不存在,在这种情况下,col4中等待NaN,df1中可能不需要df2的col1和col2对。为了说明这些情况,我在df1和df2中添加了一些行,以显示在最坏的情况下它会是怎样的

In [130]: cols = ['col1', 'col2']

In [131]: df1['col4'] = df1.set_index(cols).index.map(df2.set_index(cols)['col3'])

In [132]: df1
Out[132]:
  col1 col2  col3  col4
0    a    c     1    12
1    b    c     2    23
2    a    d     3    45
3    a    d     4    45
4    b    c     5    23

df1.merge(df2.rename(columns={'col3':'col4'}))
它不起作用,因为col4根本不是df2的col3。col4必须根据col1和col2TypeError的值从df2的col3生成:“Series”对象不可调用我得到的错误与@pydtry从@zero的答案中使用cols相同,然后
pd.merge(df1.set_index(cols),df2.set_index(cols),left_index=True,right_index=True)。重置_index()
然后更改列名