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

如何使用Pandas从第二行开始处理DataFrame?附计算代码示例

Pandas从第二行开始处理DataFrame的实现方案

核心思路

要实现从第二行开始处理DataFrame,核心是跳过第一行,仅对索引从1开始的行应用计算逻辑,同时保留第一行的原始值或初始设定值。

具体实现方法

方法1:通过索引筛选后执行计算

先提取从第二行开始的子DataFrame进行计算,再将结果赋值回原DataFrame,第一行保持原值:

# 保留第一行的原始值(若为NaN则替换为启动资金)
if pd.isnull(df.loc[0, "TodayTotalAmount"]):
    df.loc[0, "TodayTotalAmount"] = startupCapital

# 对第二行及以后的行应用计算逻辑
df.loc[1:, "TodayTotalAmount"] = df.loc[1:].apply(
    lambda x: _computeTodayTotalAmount(
        x['OpeningMethods'],
        startupCapital,
        x['TodayTotalAmount'],
        df['TodayTotalAmount'].shift(1).loc[x.name]
    ),
    axis=1
)

方法2:在自定义函数中判断行索引

直接在计算函数内判断当前行是否为第一行,若是则返回初始值,否则执行计算:

import pandas as pd

def _computeTodayTotalAmount(row, startupCapital):
    # 第一行直接返回初始值(或原始值)
    if row.name == 0:
        return row['TodayTotalAmount'] if not pd.isnull(row['TodayTotalAmount']) else startupCapital
    
    # 后续行执行原有计算逻辑
    today_val = row['TodayTotalAmount']
    yesterday_val = df['TodayTotalAmount'].shift(1).loc[row.name]
    
    if pd.isnull(today_val):
        today_val = startupCapital
    else:
        if row['OpeningMethods'] == "Long":
            return today_val - yesterday_val
        elif row['OpeningMethods'] == "Short":
            return -(today_val - yesterday_val)
        else:
            return 0

# 调用apply时传入行数据和启动资金参数
df["TodayTotalAmount"] = df.apply(lambda x: _computeTodayTotalAmount(x, startupCapital), axis=1)

注意事项

  • 如果你的DataFrame索引不是连续整数(从0开始),需要先执行df.reset_index(drop=True)重置索引,确保行判断逻辑生效。
  • 使用shift(1)时,第一行的前一日值会是NaN,这也是我们跳过第一行处理的关键原因。

内容的提问来源于stack exchange,提问作者陈哲珂

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:46:16