在Pandas中计算相邻行不同列间的差值
解决Pandas中相邻行跨列差值计算的矢量化方案
直接用Pandas的shift()方法就能实现你要的矢量化计算,完全不需要循环,处理数十万行数据毫无压力:
import pandas as pd # 计算当前行Low - 上一行High df['Difer'] = df['Low'] - df['High'].shift(1)
原理说明
df['High'].shift(1)会将High列的所有行向下偏移一位,第一行自动填充为NaN(因为没有上一行数据)- 用Low列直接减去偏移后的High列,得到的就是当前行Low与上一行High的差值,这是Pandas原生的矢量化操作,性能远高于循环
可选:处理第一行的NaN
如果需要对第一行的缺失值进行填充(比如填0),可以加上fillna():
df['Difer'] = df['Low'] - df['High'].shift(1).fillna(0)
你之前用的df['Low'].diff()是计算同列相邻行的差值(当前行Low - 上一行Low),所以不符合需求,而shift()才是跨列相邻行计算的正确姿势。
内容的提问来源于stack exchange,提问作者user3129015
相关产品推荐
相关产品推荐

