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

如何在Pandas中从第二行开始计算index_100列值

问题说明

我需要处理一个DataFrame:

  • 要求跳过index_100列值为100的第0行,从第1行开始计算index_100,计算过程必须用到第0行的原始数据。
  • 之前我用的是从第2行开始计算的代码:
df['index_100'] = ((df['index_100']).shift(1))*(df['close'])/(df['prev_close'])
  • 我的原始数据如下:
symbol      timestamp     close  index_100  prev_close
0    BTCUSDT  1665187200000  19537.11        100         NaN
1    BTCUSDT  1665187500000  19559.57        100    19537.11
2    BTCUSDT  1665187800000  19561.30        100    19559.57
3    BTCUSDT  1665188100000  19568.50        100    19561.30
4    BTCUSDT  1665188400000  19608.70        100    19568.50
5    BTCUSDT  1665188700000  19593.45        100    19608.70
  • 想要得到的计算结果是:
symbol      timestamp     close           index_100      prev_close
0    BTCUSDT  1665187200000  19537.11                 100             NaN
1    BTCUSDT  1665187500000  19559.57      100.1149607081        19537.11
2    BTCUSDT  1665187800000  19561.30   100.1238156513100        19559.57
3    BTCUSDT  1665188100000  19568.50      100.1606685943        19561.30
4    BTCUSDT  1665188400000  19608.70       100.366430859        19568.50
5    BTCUSDT  1665188700000  19593.45      100.2883742785        19608.70
解决代码

直接指定从第1行开始替换计算值,保留第0行的原始100:

# 对第1行及以后的index_100进行计算赋值
df.loc[1:, 'index_100'] = df['index_100'].shift(1)[1:] * df['close'][1:] / df['prev_close'][1:]

或者用mask方法更简洁:

# 先算出所有行的计算结果
calc_result = df['index_100'].shift(1) * df['close'] / df['prev_close']
# 把第1行及以后的原始值替换成计算结果,第0行保持不变
df['index_100'] = df['index_100'].mask(df.index >= 1, calc_result)

这两种方法都能得到你要的结果:第0行保留初始的100,第1行用第0行的100乘以当前close除以prev_close,后续每一行都用上一行计算好的index_100值继续迭代计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:30:47