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

Pandas DataFrame列表类型列使用.diff()实现逐元素差分咨询

Pandas列表类型列相邻行差分高效实现方案

实现思路

利用Pandas原生向量化操作替代Python层逐行遍历,核心逻辑是先把存储列表的列拆分为独立的数值列,用原生diff()方法处理差分后再合并回列表结构,所有计算都在Pandas底层C语言层面完成,性能远高于逐行遍历。

前置要求

  • coll2列每一行的列表长度完全一致
  • coll2内元素、col3列均为可做减法运算的数值类型

完整实现代码

import pandas as pd

# 构造测试数据(可替换为自己的DataFrame)
df = pd.DataFrame({
    'col1': [1]*5,
    'coll2': [
        [1,2,3],
        [4,5,6],
        [7,8,9],
        [10,11,12],
        [13,14,15]
    ],
    'col3': [10,20,30,40,50]
})

# 1. 将列表列拆分为独立数值列
expanded_col2 = pd.DataFrame(df['coll2'].tolist(), index=df.index)
# 2. 对拆分后的列做相邻行差分,丢弃第一行空值
expanded_col2_diff = expanded_col2.diff().iloc[1:]
# 3. 差分后的多列重新合并为列表
coll2_diff = expanded_col2_diff.apply(list, axis=1)
# 4. 处理普通数值列的差分
col3_diff = df['col3'].diff().iloc[1:]
# 5. 拼接得到最终结果
result = pd.DataFrame({
    'col1': df['col1'].iloc[1:].values,
    'coll2': coll2_diff.values,
    'col3': col3_diff.values
}).reset_index(drop=True)

print(result)

特殊场景适配

如果coll2列的列表长度不固定,可以使用优化后的批量推导方案,性能依然远高于逐行遍历:

prev_col2 = df['coll2'].shift(1).iloc[1:]
curr_col2 = df['coll2'].iloc[1:]
coll2_diff = pd.Series([[c - p for c, p in zip(curr, prev)] for curr, prev in zip(curr_col2, prev_col2)], index=curr_col2.index)

# 后续拼接逻辑和上面方案一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:00