如何根据两个数据框的两列之间的关系获得匹配的 2 个数据框

How to get 2 data frames matched based on relation between two columns of the two dataframe

我有两个数据框,数据格式为

Date     Col1 Col2 Col3
1/1/2021  a    b    c
2/1/2021  d    e    f
3/1/2021  g    h    1

Date     Col4 Col5 Col6 
1/1/2021  a    b   c
2/1/2021  d    e   f
3/1/2021  g    h   i

我有一个关系说

Cola Colb
Col1 Col4
Col2 Col5
Col3 Col6

我想要实现的是

Date     Cola Colb 
1/1/2021   a    a
2/1/2021   d    d
3/1/2021   g    g
1/1/2021   b    b
2/1/2021   e    e
3/1/2021   h    h
1/1/2021   c    c
2/1/2021   f    f
3/1/2021   l    l

我的原计划是使用unpivot the initial data frame并使用merge来获取数据,但由于数据集很大,这不是一个可行的选择。谁能建议一种基于列之间的关系组合数据框的有效方法?

您可以转换 mapper_df:

Cola    Colb
0   Col1    Col4
1   Col2    Col5
2   Col3    Col6

到字典并修改df2的列名。然后 stack DataFrames 和 join on "Date":

d = mapper_df.set_index('Cola')['Colb'].to_dict()
df2.columns = df2.columns.map({k: d.get(k, k) for k in df2.columns})
out = df1.set_index('Date').stack().to_frame().join(df2.set_index('Date').stack().to_frame(), lsuffix='_Cola', rsuffix='_Colb').droplevel(1)
out = out.rename(columns={c:c.split('_')[1] for c in out.columns})

输出:

         Cola Colb
Date              
1/1/2021    a    a
1/1/2021    b    b
1/1/2021    c    c
2/1/2021    d    d
2/1/2021    e    e
2/1/2021    f    f
3/1/2021    g    g
3/1/2021    h    h
3/1/2021    1    i