在Python中连接多列上的两个数据帧
我有两个名为df1和df2的数据帧 df1= df2= col1和col2中的条目是来自df2的产品id。 我想创建一个新的数据帧“df3”,它包含以下列和条目 df3= i、 e添加在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
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