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
相关产品推荐
相关产品推荐

