Python 使用左侧多个值和右侧一个值进行连接
我正在寻找帮助连接熊猫中的两个数据集 我的第一个数据集是一个联系人数据集,包括姓名和ID。第二个数据集是一个交易数据集,在其他字段中包括一列,其中包含多个逗号分隔的联系人ID。我想将deals数据集左键连接到contacts数据集,其中contact ID与“associated contacts”字段中的一个ID匹配Python 使用左侧多个值和右侧一个值进行连接,python,pandas,join,Python,Pandas,Join,我正在寻找帮助连接熊猫中的两个数据集 我的第一个数据集是一个联系人数据集,包括姓名和ID。第二个数据集是一个交易数据集,在其他字段中包括一列,其中包含多个逗号分隔的联系人ID。我想将deals数据集左键连接到contacts数据集,其中contact ID与“associated contacts”字段中的一个ID匹配 contacts\u df=pd.DataFrame( {'name':['John Smith'、'Jane Doe'、'James Bond'], 'id':[1,2,3]
contacts\u df=pd.DataFrame(
{'name':['John Smith'、'Jane Doe'、'James Bond'],
'id':[1,2,3]}
deals\u df=pd.DataFrame(
{'deal_name':['McDonalds','KFC'],
“关联的_触点”:['1,3','2']}
使用(0.25+)来重复关联的_触点的值,该值由,
拆分,laso必须将列id
转换为整数:
deals_df = (deals_df.assign(id = deals_df.pop('associated_contacts').str.split(','))
.explode('id')
.assign(id = lambda x: x['id'].astype(int)))
print (deals_df)
deal_name id
0 McDonalds 1
0 McDonalds 3
1 KFC 2
您的解决方案应更改为原始:
deals_df = (deals_df.join(deals_df.pop('associated_contacts')
.str.split(',', expand=True)
.stack()
.astype(int)
.reset_index(level=1, drop=True)
.rename('id')))
print (deals_df)
0 McDonalds 1
0 McDonalds 3
1 KFC 2
然后仅在
上使用参数的合并
:
merged = contacts_df.merge(deals_df, how='left', on='id')
print (merged)
name id deal_name
0 John Smith 1 McDonalds
1 Jane Doe 2 KFC
2 James Bond 3 McDonalds