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'])
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 rowvolume
then add new column titledposition
and subtractclose
-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'])