Python 使用左侧多个值和右侧一个值进行连接

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]

我正在寻找帮助连接熊猫中的两个数据集

我的第一个数据集是一个联系人数据集,包括姓名和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]}
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