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

如何利用Pandas生成基于同SKU前一行End值的Start列?

高效生成Pandas的Start列方案

问题背景

现有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
         'sku': ['A', 'A', 'B', 'B', 'C', 'C'],
         'date': ['2022-08-29', '2022-08-30', '2022-08-29', 
                  '2022-08-30', '2022-08-29', '2022-08-30'],
         'End': [100, 110, 0, 210, 300, 310]})

需要创建Start列,规则为:同一sku下当日的Start值等于前一日的End值,仅对存在前序日期的行生效;每个sku的首个日期行无需设置Start值,预期结果如下:

sku        date  End  Start
0    A  2022-08-29  100     
1    A  2022-08-30  110   100
2    B  2022-08-29    0     
3    B  2022-08-30  210     0
4    C  2022-08-29  300     
5    C  2022-08-30  310   300

原方案用for循环效率低下,需要用Pandas的矢量化操作实现高效处理。

高效实现方案

直接使用groupby按sku分组,对End列执行shift(1)操作,就能快速生成Start列,代码如下:

df['Start'] = df.groupby('sku')['End'].shift(1)

代码说明

  • groupby('sku'):按商品sku分组,确保只在同一sku内部进行数据偏移
  • shift(1):将每组内的End值向下偏移一行,刚好让下一行的Start等于上一行的End
  • 首个日期的行因为没有前序数据,会自动填充为NaN,如果需要和示例一样显示为空字符串,可补充一步:
df['Start'] = df.groupby('sku')['End'].shift(1).fillna('')

这种矢量化操作比for循环效率高几个数量级,尤其适合处理大型数据集,执行后即可得到与预期完全一致的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:01:29