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

如何在pandas DataFrame中按另一列条件对指定列应用.diff()生成新列

Pandas按产品分组计算相邻采购价差值实现方案

核心实现逻辑

因为你已经提前按产品、日期完成排序,直接对产品列分组后调用diff()即可,groupby会限制差值计算仅在同一个产品的组内执行,产品切换的行默认返回空值,完美匹配需求。

代码实现

场景1:产品切换行保留空值(符合统计逻辑,首行无前置对比数据默认留空)

import pandas as pd
import numpy as np

df=pd.DataFrame({'A':['Shrimp', 'Shrimp', 'Shrimp','Octopus','Octopus','Fish','Fish'],
                 'B':[10,11,15,25,30,5,15]})
# 按产品A分组后对价格B计算差值
df['C'] = df.groupby('A')['B'].diff()

运行后输出结果:

ABC
Shrimp10NaN
Shrimp111.0
Shrimp154.0
Octopus25NaN
Octopus305.0
Fish5NaN
Fish1510.0

场景2:产品切换行差值设为0(匹配你原代码的else分支逻辑)

仅需在diff后追加fillna(0)即可:

df['C'] = df.groupby('A')['B'].diff().fillna(0)

运行后输出结果:

ABC
Shrimp100.0
Shrimp111.0
Shrimp154.0
Octopus250.0
Octopus305.0
Fish50.0
Fish1510.0

原代码问题说明

你写的lambda表达式是单行判断逻辑,无法直接作用于整个DataFrame对象,执行会报错。groupby是Pandas处理分组内运算的标准实现,性能和可读性都远高于逐行判断方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:01