如何在Pandas中对比当前行与前一行值创建趋势列?
Pandas实现相邻行趋势计算的方法
完整实现代码
import pandas as pd import numpy as np # 构造示例数据集 data = [ {'year': 2017, 'v1': 0.3, 'v2': 0.1}, {'year': 2018, 'v1': 0.1, 'v2': 0.1}, {'year': 2019, 'v1': -0.2, 'v2': 0.5}, {'year': 2020, 'v1': np.nan, 'v2': -0.3}, {'year': 2021, 'v1': 0.8, 'v2': 0.0} ] df = pd.DataFrame(data) # 定义需要计算趋势的字段列表 calc_cols = ['v1', 'v2'] for col in calc_cols: # 计算当前行与上一行的差值,首行、涉及空值的行差值自动为NaN col_diff = df[col].diff() # 配置判断条件与对应返回值 conditions = [ col_diff > 0, col_diff < 0, col_diff == 0 ] choices = ['increase', 'decrease', 'equal'] # 生成趋势列,不满足条件的场景默认返回NaN df[f'trend_{col}'] = np.select(conditions, choices, default=np.nan) # 输出结果 print(df)
逻辑说明
- 调用
diff()方法计算相邻行差值时,首行没有上一行参考,会自动返回NaN,符合首行趋势值为NaN的要求 - 如果当前行或者上一行的值为NaN,差值计算结果也为NaN,匹配不到任何判断条件时会走default逻辑返回NaN,符合空值对应的规则
- 剩余正常数值的行,会根据差值的正负、等于0的情况返回对应的趋势标识
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

