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

如何在Pandas中基于同名称分组行差值高效创建新列

Pandas 按分组差分计算的向量化实现方案

本方法为全向量化实现,无Python层循环,处理百万级以上数据仍有较高性能

实现逻辑

  • 先将日期列转为datetime类型,避免字符串排序出现逻辑错误
  • 按Name分组后,组内按日期升序排列,确保「上一次出现」的定义和时间顺序一致
  • 用pandas内置的groupby+diff方法直接计算组内相邻行Feature差值,每组首行的空差值直接填充0
  • 最后按原索引恢复原始数据的行顺序即可

完整代码

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    "Name": [ "N1", "N2", "N3", "N1", "N1", "N2", "N3", "N2" ],
    "Date": [ "31-10-2021", "31-10-2021" , "31-10-2021", "15-10-2021", "14-10-2021", "13-10-2021", "12-10-2021", "11-10-2021" ],
    "Feature": [ 4, 5, 6, 3, 1, 6, 3, 3 ]
})

# 转换日期格式保证排序正确
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
# 按名称+日期排序,保留原索引
df_sorted = df.sort_values(['Name', 'Date']).reset_index()
# 分组计算差分,空值填充0
df_sorted['New_column'] = df_sorted.groupby('Name')['Feature'].diff().fillna(0).astype(int)
# 恢复原始行顺序
df = df_sorted.sort_values('index').drop(columns='index').reset_index(drop=True)
# 可选:把日期转回原始字符串格式
df['Date'] = df['Date'].dt.strftime('%d-%m-%Y')

执行后得到的df和你给出的预期输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:01