You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中匹配列表内所有元素的对应信息?

如何匹配DataFrame中多值分隔字段的对应信息?

这确实是处理多值分隔字段时很常见的需求,我来分享两种实用的解决方法,都能完美实现你想要的效果:

方法一:拆分-匹配-合并(适合大数据量)

这种方法通过将多值字段拆分成单行,匹配完成后再合并,效率更高,适合处理较大的数据集:

首先准备你的原始数据:

import pandas as pd

df = pd.DataFrame({'ID':['1','2'],'Fruit':['apple|banana','banana|watermelon']})
price = pd.DataFrame({'Fruit':['apple','banana','watermelon','pear'], 'price':['1.49','0.59','5.99','1.99']})

步骤1:拆分多值字段并展开

把df中的Fruit列按|拆分,然后将每个水果单独成一行,同时保留对应的ID:

df_expanded = df.assign(Fruit=df['Fruit'].str.split('|')).explode('Fruit')

执行后得到的df_expanded是这样的:

ID    Fruit
0  1    apple
0  1   banana
1  2   banana
1  2 watermelon

步骤2:匹配价格

将展开后的表和price表做左连接,匹配每个水果对应的价格:

merged = pd.merge(df_expanded, price, on='Fruit', how='left')

步骤3:重新合并字段

按ID分组,把每个ID对应的水果和价格重新用|拼接起来:

result = merged.groupby('ID').agg(
    Fruit=('Fruit', '|'.join),
    price=('price', '|'.join)
).reset_index()

最终得到的result就是你想要的结果:

ID             Fruit      price
0  1      apple|banana  1.49|0.59
1  2  banana|watermelon  0.59|5.99

方法二:字典映射+逐行处理(代码更简洁)

如果你的数据集不大,这种方法代码更简洁,直接用字典映射匹配价格:

步骤1:将价格表转为字典

把price表转换成以水果名为键、价格为值的字典,方便快速查找:

price_dict = price.set_index('Fruit')['price'].to_dict()

步骤2:逐行匹配并拼接价格

用apply函数处理df的每一行,拆分水果字段后逐个匹配价格,再拼接成字符串:

df['price'] = df['Fruit'].apply(
    lambda x: '|'.join([price_dict[fruit] for fruit in x.split('|')])
)

执行后df就直接更新为你期望的结果啦。

两种方法各有优劣:方法一效率更高,适合大数据量;方法二代码更短,适合小数据集,你可以根据自己的实际情况选择~

内容的提问来源于stack exchange,提问作者Lily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:20:58