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

pandas如何比较多列与前一行值 满足条件时计算age差值

问题解决

错误原因

  • 选取DataFrame多列需使用方括号[],你使用圆括号()相当于尝试调用DataFrame对象,因此触发'DataFrame' object is not callable类型错误
  • 你填写的列名'name '末尾多了空格,和实际列名'name'不匹配,同时代码中的df_alarms属于笔误,应当对应原变量df

实现代码

import pandas as pd
# 创建测试DataFrame
list_columns = ['name', 'city', 'country','age']
list_data = [
    ['ana', 'london', 'england',25],
    ['ana', 'london', 'england',22],
    ['sean', 'manchester','london', 20],
    ['sean', 'manchester','london', 23],
    ['dean', 'manchester','germany', 20]
    ]
df = pd.DataFrame(columns=list_columns, data=list_data)

# 计算match列:三个字段全和上一行相等才标记为True
df['match'] = df[['name', 'city', 'country']].eq(df[['name', 'city', 'country']].shift()).all(axis=1)
# 计算result列:仅match为True时返回前一行age减当前行age,其余场景为NaN
df['result'] = (df['age'].shift() - df['age']).where(df['match'])

结果验证

运行代码后得到的结果完全符合需求:

  • 首行无前置对比行,match为False,result为NaN
  • 第二行三个字段和首行完全匹配,match为True,result为25-22=3
  • 第三行和第二行字段不匹配,match为False,result为NaN
  • 后续行按相同规则依次计算即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:15:01