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

如何将DataFrame前一行的值传入apply()函数?

在Pandas的apply()中获取前一行数据构建新列

你可以直接在apply()中通过行索引结合df.loc来访问前一行的a列值,不需要额外创建偏移列。下面是针对你需求的实现方式:

基础实现(Lambda表达式)

import pandas as pd

l1 = [1,2,3,4,5]
l2 = [3,2,5,4,6]
df = pd.DataFrame(data=l1, columns=['a'])
df['b'] = l2

# 直接在apply中获取前一行的a值,第一行无前置行返回pd.NA
df['c'] = df.apply(lambda row: df.loc[row.name - 1, 'a'] + row['b'] if row.name > 0 else pd.NA, axis=1)
print(df)

输出结果:

a  b     c
0  1  3  <NA>
1  2  2   3.0
2  3  5   7.0
3  4  4   7.0
4  5  6  10.0

复杂条件场景(自定义函数)

针对你提到的需要条件判断的实际场景,可以封装自定义函数,并将整个DataFrame作为参数传入apply(),方便在函数内灵活访问前一行数据:

def calculate_c(row, df):
    # 处理第一行无前置行的情况
    if row.name == 0:
        return pd.NA
    prev_a = df.loc[row.name - 1, 'a']
    # 这里添加你的条件判断逻辑
    if prev_a >= 3:
        return prev_a + row['b'] + 1  # 示例:前一行a>=3时,结果加1
    else:
        return prev_a + row['b']

df['c_custom'] = df.apply(calculate_c, args=(df,), axis=1)
print(df)

输出结果:

a  b     c  c_custom
0  1  3  <NA>      <NA>
1  2  2   3.0       3.0
2  3  5   7.0       7.0
3  4  4   7.0       8.0
4  5  6  10.0      11.0

关键说明

  • row.name代表当前行的索引,通过row.name - 1即可定位到前一行的索引
  • 使用df.loc[索引, 列名]可以精准获取前一行的指定列值
  • 自定义函数需要通过args=(df,)将DataFrame传入,这样函数内部才能访问整个数据集进行逻辑判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:06:22