Pandas中单元格为列表的两个DataFrame如何实现逐元素相减
逐单元格列表元素减法实现方案
最高效实现方法
利用numpy的向量化运算能力完成,比纯Python循环遍历效率高1~2个量级,适配大数量级的DataFrame计算场景。
完整实现代码
import pandas as pd import numpy as np # 构造示例数据(实际使用时替换为你自己的df1、df2即可) df1 = pd.DataFrame({ "l1": [[4,2,1]], "l2": [[8,9,6]], "l3": [[7,4,5]] }) df2 = pd.DataFrame({ "l1": [[2,1,0]], "l2": [[7,7,2]], "l3": [[6,1,2]] }) # 核心运算逻辑 # 1. 将两个DataFrame的单元格列表转为numpy数组,利用数组广播特性完成减法 new_df = df1.applymap(np.array) - df2.applymap(np.array) # 2. 若需要结果单元格仍为列表格式,添加一步类型转换即可 new_df = new_df.applymap(lambda arr: arr.tolist())
运行结果
输出的new_df完全匹配需求格式:
| 序号 | l1 | l2 | l3 |
|---|---|---|---|
| 0 | [2, 1, 1] | [1, 2, 4] | [1, 3, 3] |
优化建议
如果日常高频需要做这类单元格内的序列运算,建议初始化DataFrame时就将单元格内容存储为numpy数组而非Python列表,后续运算时可省略类型转换步骤,直接执行new_df = df1 - df2即可得到结果,执行效率更高。
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

