Python:从另一DataFrame查找匹配元素并返回对应ID的实现方案问询
解决方案
我来一步步带你实现这个需求,用pandas就能轻松搞定:
首先,先导入pandas并创建示例数据(方便你直接测试验证):
import pandas as pd # 创建订单DataFrame orders = pd.DataFrame({ 'items': ['curd,vada,rice', 'idly,sambar'], 'chat_id': ['74374374h4473', '7949759459h34'] }) # 创建菜单DataFrame menu = pd.DataFrame({ 'id': [1, 2, 3, 4, 5], 'items': ['idly', 'vada', 'rice', 'curd', 'sambar'] })
接下来是核心处理步骤:
- 拆分订单中的多菜品字段:用
str.split(',')把逗号分隔的菜品字符串拆成列表,再用explode()把列表展开成单独的行,这样每个菜品都会对应一条原有的chat_id记录:
orders_expanded = orders.assign(items=orders['items'].str.split(',')).explode('items')
这一步处理后,orders_expanded的结构会变成:
| items | chat_id |
|---|---|
| curd | 74374374h4473 |
| vada | 74374374h4473 |
| rice | 74374374h4473 |
| idly | 7949759459h34 |
| sambar | 7949759459h34 |
- 关联菜单获取菜品ID:用
merge()方法,根据items字段将两个DataFrame关联,最后只保留我们需要的chat_id和id列:
result = orders_expanded.merge(menu, on='items')[['chat_id', 'id']]
最后输出结果就是你预期的格式了:
print(result)
输出内容:
chat_id id 0 74374374h4473 4 1 74374374h4473 2 2 74374374h4473 3 3 7949759459h34 1 4 7949759459h34 5
如果你的实际数据量较大也不用担心,这个方案用的是pandas的矢量化操作,比手动循环高效得多。
内容的提问来源于stack exchange,提问作者HA the data scientist
相关产品推荐
相关产品推荐

