如何在Pandas DataFrame中计算连续行差值并存入后一行?
问题:计算DataFrame连续行差值并生成dA列
原始DataFrame如下:
stkPx strike delta trade_date expirDate dte cType pBidPx pAskPx dA 2 86.91 76.0 0.893083 2008-12-29 2009-01-17 0.05205 1 0.50 0.56 -0.16 3 86.91 77.0 0.877667 2008-12-29 2009-01-17 0.05205 1 0.60 0.66 -0.16 4 86.91 78.0 0.859326 2008-12-29 2009-01-17 0.05205 1 0.71 0.76 -0.20 5 86.91 79.0 0.838882 2008-12-29 2009-01-17 0.05205 1 0.85 0.91 -0.21
需求是计算连续两行的差值,将结果存入新列dA,结果保存在两行中的第二行。具体逻辑为:第n行的dA = 第n行的pBidPx - 第n-1行的pAskPx,第一行dA为N/A。
原代码gb['dA'] = gb['pBidPx'] - gb['pAskPx'].shift(-1)不符合预期,正确写法如下:
gb['dA'] = gb['pBidPx'] - gb['pAskPx'].shift(1)
这里使用shift(1)将pAskPx列向下偏移一行,让当前行的pBidPx减去上一行的pAskPx,第一行因无对应上一行数据,会自动填充为NaN(对应需求中的N/A)。
执行后得到的预期结果:
stkPx strike delta trade_date expirDate dte cType pBidPx pAskPx dA 2 86.91 76.0 0.893083 2008-12-29 2009-01-17 0.05205 1 0.50 0.56 NaN 3 86.91 77.0 0.877667 2008-12-29 2009-01-17 0.05205 1 0.60 0.66 0.04 # 0.60 - 0.56 4 86.91 78.0 0.859326 2008-12-29 2009-01-17 0.05205 1 0.71 0.76 0.05 # 0.71 - 0.66 5 86.91 79.0 0.838882 2008-12-29 2009-01-17 0.05205 1 0.85 0.91 0.09 # 0.85 - 0.76
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

