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

如何在Pandas DataFrame中从第二行开始填充acc与decc列

问题描述

现有如下DataFrame:

import pandas as pd
import numpy as np
df=pd.DataFrame(data={'speed':[63.000,65.000,65.000,64.000,63.000],
                       'acc':[np.nan]*5,'decc':[np.nan]*5})

需要按照以下逻辑填充acc和decc列:

for x in range(len(speed)-1):
     y=speed[x+1]-speed[x]      
     if y>0:
        acc[x+1]=y
        decc[x+1]=0
     elif y<0: 
          acc[x+1]=0
          decc[x+1]=y
     else:
          acc[x+1]=0
          decc[x+1]=0

即基于speed列相邻元素的差值,从第二行开始为acc和decc列赋值,希望用DataFrame的Series操作实现,替代循环。

解决方案

可以利用Pandas的diff()方法直接计算相邻速度的差值,再通过条件判断生成目标列,全程无需循环,效率更高:

import pandas as pd
import numpy as np

# 初始化DataFrame
df = pd.DataFrame(data={'speed':[63.000,65.000,65.000,64.000,63.000],
                        'acc':[np.nan]*5,'decc':[np.nan]*5})

# 计算相邻speed的差值,diff()默认后减前,对应原逻辑中的y = speed[x+1] - speed[x]
speed_diff = df['speed'].diff()

# 填充acc列:差值>0时取差值,否则取0
df['acc'] = speed_diff.where(speed_diff > 0, 0)
# 若需要第一行也设为0,可添加:df['acc'].fillna(0, inplace=True)

# 填充decc列:差值<0时取差值,否则取0
df['decc'] = speed_diff.where(speed_diff < 0, 0)
# 若需要第一行也设为0,可添加:df['decc'].fillna(0, inplace=True)

结果示例

执行后得到的DataFrame如下:

speedaccdecc
63NaNNaN
652.00
650.00
640.0-1.0
630.0-1.0

关键逻辑说明

  1. df['speed'].diff():直接计算当前行与上一行的差值,返回的Series第一行为NaN,其余行对应原逻辑中的y值。
  2. where()方法:实现条件赋值,满足指定条件时保留原数值,否则替换为指定值,完美对应原逻辑的分支判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:52:16