Python Dataframe 获取上一行

Python Dataframe get previous row

              Open    High     Low   Close     Volume  Dividends  Stock Splits
Date                                                                                      
2020-07-31  324.60  325.33  320.05  325.22   85210800        0.0             0 
2020-08-03  327.01  328.31  326.42  327.48   53077900        0.0             0 
2020-08-04  326.55  328.74  326.55  328.74   41917900        0.0             0 

如何在代码中编写以下内容:

If current row volume is more than previous row volume then add new column titled position and subtract close - open of the current row ?

如果我没看错你的要求,你可以使用模式:

df.loc[{predicate}, {location}] = {expression}

所以:

df.loc[df.diff().Volume > 0, 'Position'] = df.Close - df.Open

变换:

     Open   Close      Volume
0  324.60  325.22  85210800.0
1  327.01  327.48  53077900.0
2  326.55  328.74  41917900.0

收件人:

     Open   Close      Volume  Position
0  324.60  325.22  85210800.0       NaN
1  327.01  327.48  53077900.0      0.47
2  326.55  328.74  41917900.0      2.19

不是最优雅但应该工作:

df['Position'] = np.nan
df.loc[df['Volume']>df.shift(periods=1)['Volume'],'Position'] = df.loc[df['Volume']>df.shift(periods=1)['Volume'],'Close']-df.loc[df['Volume']>df.shift(periods=1)['Volume'],'Open']

如果您对不满足交易量条件(而不是 NaN)的头寸使用 0.00 没问题,则可以使用更简单的版本:

df['Position'] = (df.shift(periods=1)['Volume'] <df['Volume']) *(df['Close']-df['Open'])