如何基于字符串聚合列最简合并两个DataFrames并生成对应定义列
问题:如何合并两个DataFrame得到指定结果?
原始数据
DataFrame(简称DF)
| Lookup | Definition |
|---|---|
| A | Apple |
| B | Banana |
| C | Carrot |
DataFrame2(简称DF2)
| SNo | Lookup Values |
|---|---|
| 1 | ['A', 'B'] |
| 2 | ['A', 'C'] |
| 3 | ['B', 'C'] |
注:“Lookup Values”列为字符串列表类型。
目标结果
| SNo | Lookup Values | Lookup Definitions |
|---|---|---|
| 1 | A, B | Apple, Banana |
| 2 | A, C | Apple, Carrot |
| 3 | B, C | Banana, Carrot |
最简实现方案
用Python的pandas库可以快速实现,核心思路是用字典做映射,比传统JOIN更高效简洁:
- 先把DF转换成用于映射的字典:
import pandas as pd # 假设DF和DF2已提前创建好 lookup_map = DF.set_index('Lookup')['Definition'].to_dict()
- 直接对DF2做列转换和映射,一步得到结果:
result = DF2.copy() # 把列表转成逗号分隔的字符串 result['Lookup Values'] = result['Lookup Values'].apply(', '.join) # 根据映射生成定义列 result['Lookup Definitions'] = result['Lookup Values'].apply( lambda x: ', '.join([lookup_map[item.strip()] for item in x.split(',')]) )
或者用更紧凑的链式写法:
lookup_map = DF.set_index('Lookup')['Definition'].to_dict() result = DF2.assign( LookupValues=DF2['Lookup Values'].apply(', '.join), LookupDefinitions=DF2['Lookup Values'].apply( lambda lst: ', '.join([lookup_map[val] for val in lst]) ) ).rename(columns={'LookupValues': 'Lookup Values', 'LookupDefinitions': 'Lookup Definitions'})
执行完上述代码后,result就是你要的目标DataFrame。
内容的提问来源于stack exchange,提问作者Parsh
相关产品推荐
相关产品推荐

