pandas中将集合类型DataFrame转为关联另一表取值的字典类型DataFrame的方法
pandas 高效实现集合单元格转字典列表方案
核心思路利用pandas按行apply的原生能力,替代多层嵌套for循环,利用索引对齐特性匹配df2的对应行取值,性能远优于纯Python循环实现,尤其适合大数据量场景。
实现代码
import pandas as pd # 测试数据和原示例一致 df1 = pd.DataFrame({"begin": [{"a", "b"}, {"b"}, {"c"}], "end": [{"x"}, {"z", "y"}, {"z"}]}) df2 = pd.DataFrame( {"a": [10, 10, 15], "b": [15, 20, 30], "c": [8, 12, 10], "x": [1, 2, 3], "y": [1, 3, 4], "z": [1, 3, 1]} ) # 核心转换逻辑 df3 = df1.apply( lambda row: pd.Series([ [{"letter": v, "value": df2.loc[row.name, v]} for v in cell] for cell in row ]), axis=1 ) df3.columns = df1.columns # 验证输出 print(df3)
说明
- 因为
df1中单元格存储的是无序集合,输出列表内字典的顺序会随集合遍历顺序变化,属于正常现象。如果需要固定排序,可在遍历集合时新增sorted()包裹,改为for v in sorted(cell)即可。 - 该实现相比原三层嵌套循环,性能提升可达数倍到数十倍,数据量越大提升效果越明显。
内容的提问来源于stack exchange,提问作者jss367
相关产品推荐
相关产品推荐

