在Python中连接多列上的两个数据帧

在Python中连接多列上的两个数据帧,python,python-2.7,python-3.x,pandas,Python,Python 2.7,Python 3.x,Pandas,我有两个名为df1和df2的数据帧 df1= df2= col1和col2中的条目是来自df2的产品id。 我想创建一个新的数据帧“df3”,它包含以下列和条目 df3= i、 e添加col1\u名称和col2\u名称,只要df2中的product\u id等于col1和col2值 是否可以通过以下方式实现: df3 = pd.concat([df1, df2], axis=1) 我对熊猫df和Python的了解是初级水平的。 有没有办法做到这一点?提前感谢。我认为您可以使用从df2生成的di

我有两个名为df1和df2的数据帧

df1=

df2=

col1和col2中的条目是来自df2的产品id。

我想创建一个新的数据帧“df3”,它包含以下列和条目

df3=

i、 e添加
col1\u名称
col2\u名称
,只要
df2
中的
product\u id
等于
col1
col2

是否可以通过以下方式实现:

df3 = pd.concat([df1, df2], axis=1)
我对熊猫df和Python的了解是初级水平的。 有没有办法做到这一点?提前感谢。

我认为您可以使用从
df2
生成的
dict
,然后按以下方式对列名称排序:



是的,先生,除此之外,如果我只想在最终结果中显示
col1_name | col2_name | count
。有没有更好的方法比
df1.drop('col1','col2')
更受欢迎,使用map()的一个不错的解决方案我尝试在更大的数据集上使用相同的逻辑,我的col1_名称和col2_名称将出现在你得到的
NaN
中,如果一些值不在
df2
中。你可以用sample和
d={1:'abc',2:'xyz',3:'aaaa}来测试它
    product_id  product_name
0      1            abc
1      2            xyz
2      3            aaaa
3      12           qwert 
4      13           sed
5      15           qase
6      36           asdf
7      17           zxcv
   col1 | col1_name | col2 | col2_name | count
0   1   |   abc     |   36 |    asdf   |  200
1   12  |   qwert   |   15 |    qase   |  200
2   13  |   sed     |   17 |    zxcv   |  100
df3 = pd.concat([df1, df2], axis=1)
d = df2.set_index('product_id')['product_name'].to_dict()
print (d)
{1: 'abc', 2: 'xyz', 3: 'aaaa', 36: 'asdf', 17: 'zxcv', 12: 'qwert', 13: 'sed', 15: 'qase'}

df1['col1_name'] = df1.col1.map(d)
df1['col2_name'] = df1.col2.map(d)
df1 = df1.sort_index(axis=1)
print (df1)
   col1 col1_name  col2 col2_name  count
0     1       abc    36      asdf    200
1    12     qwert    15      qase    200
2    13       sed    17      zxcv    100
df1 = df1.drop(['col1','col2'], axis=1)
print (df1)
  col1_name col2_name  count
0       abc      asdf    200
1     qwert      qase    200
2       sed      zxcv    100