我有一个pandas数据帧,包含以下列
open high low close
0 66069.69 66151.73 65932.01 65998.30
1 65998.29 65998.30 65702.43 65836.37
2 65836.38 66000.00 65814.63 65924.44
3 65924.43 66065.78 65864.82 66021.54
4 66021.55 66084.32 65800.00 65801.19
5 65805.00 65886.41 65750.00 65797.19
想要使用逻辑创建两个新列
if open<close:
+HL = (high-low)
-HL = the last -HL value if it exist else nan
else:
+HL = the last +HL value if it exist else nan
-HL = (high-low)
新的df应该是这样的。
open high low close +HL -HL
0 66069.69 66151.73 65932.01 65998.30 nan 219.72
1 65998.29 65998.30 65702.43 65836.37 nan 295.87
2 65836.38 66000.00 65814.63 65924.44 185.37 295.87
3 65924.43 66065.78 65864.82 66021.54 200.96 295.87
4 66021.55 66084.32 65800.00 65801.19 200.96 284.32
5 65805.00 65886.41 65750.00 65797.19 200.96 136.41
您可以根据相反的条件将high - low
分配给两个不同的列,然后向前填充:
df['+HL'] = np.where(df['open'] < df['close'], df['high'] - df['low'], np.nan)
df['-HL'] = np.where(df['open'] >= df['close'], df['high'] - df['low'], np.nan)
df = df.ffill()
输出:
>>> df
open high low close +HL -HL
0 66069.69 66151.73 65932.01 65998.30 NaN 219.72
1 65998.29 65998.30 65702.43 65836.37 NaN 295.87
2 65836.38 66000.00 65814.63 65924.44 185.37 295.87
3 65924.43 66065.78 65864.82 66021.54 200.96 295.87
4 66021.55 66084.32 65800.00 65801.19 200.96 284.32
5 65805.00 65886.41 65750.00 65797.19 200.96 136.41