在数据集中查找上升值和下降值的差异



这是我以前在Excel中做过的事情,但现在在python中尝试,有点卡住了。找不到相应的库或本机函数。我想shift((会有所帮助,但我不知道在哪里可以使用它

没有必要把所有的股票行情都放在一个df中,它只是看起来比更好

我制作了一个由10个股票行情器组成的漂亮数据集,这里有一个示例:

symbol             open
2020-05-03 00:28:00   BCH/BTC     0.0295400000
2020-05-03 00:35:00   BCH/BTC     0.0291680000
*******************
2020-05-03 18:05:00   BCH/BTC     0.0282650000
2020-05-03 00:28:00   BNB/BTC     0.0019586000
*******************
2020-05-03 17:58:00   XTZ/BTC     0.0003064000
2020-05-03 18:05:00   XTZ/BTC     0.0003065000
[1520 rows x 6 columns]

正如您所看到的,时间是一个指数,每个股票代码都是一样的

任务是再制作2个这样的列:

symbol             open       is_advancing           ratio
2020-05-03 00:28:00   BCH/BTC     0.0295400000                Nan             Nan
2020-05-03 00:35:00   BCH/BTC     0.0291680000                 -1    0.9874069059
*******************
2020-05-03 18:05:00   BCH/BTC     0.0282650000                  1    1.0028452501
2020-05-03 00:28:00   BNB/BTC     0.0019586000                Nan             Nan
*******************
2020-05-03 17:58:00   XTZ/BTC     0.0003064000                  0               1
2020-05-03 18:05:00   XTZ/BTC     0.0003065000                  1    1.0003263707
[1520 rows x 6 columns]

is_advancing显示以前的值是更高、更小还是相同比率显示当前和以前之间的比率

我试着尽可能全面地解释它,但如果有任何其他问题,请随时询问

你的转变是正确的。您可以使用np.select((根据多个条件分配新值。

df = pd.read_clipboard(sep=r"[ ]{2,}")
print(df)
symbol             open
2020-05-03 00:28:00   BCH/BTC     0.0295400000
2020-05-03 00:35:00   BCH/BTC     0.0291680000
df['shift'] = df['open'].astype(float).shift(1)
conditions  = [ df['open'] > df['shift'], df['open'] == df['shift'], df['open'] < df['shift']]
choices     = [ 1, 0, -1]

df["is_advancing"] = np.select(conditions, choices, default=np.nan)

df['ratio'] = df['open']/df['shift']
print(df)
symbol open    shift   is_advancing    ratio
2020-05-03 00:28:00 BCH/BTC 0.029540    NaN      NaN        NaN
2020-05-03 00:35:00 BCH/BTC 0.029168    0.02954 -1.0    0.987407

如果你想在所有的股票行情中都这样做,你可以这样做。

print(df)
symbol  open
2020-05-03 00:28:00 BCH/BTC 0.029540
2020-05-03 00:35:00 BCH/BTC 0.029168
2020-05-03 18:05:00 BCH/BTC 0.028265
2020-05-03 00:28:00 BNB/BTC 0.001959
2020-05-03 17:58:00 XTZ/BTC 0.000306
2020-05-03 18:05:00 XTZ/BTC 0.000307
symbols_list = df['symbol'].unique().tolist()
new_dfs_list = []
for s in symbols_list:
df_slice = df[df['symbol'] == s].copy()
df_slice['shift'] = df_slice['open'].astype(float).shift(1)
conditions  = [ df_slice['open'] > df_slice['shift'], df_slice['open'] == df_slice['shift'], df_slice['open'] < df_slice['shift']]
choices     = [ 1, 0, -1]
df_slice["is_advancing"] = np.select(conditions, choices, default=np.nan)
df_slice['ratio'] = df_slice['open']/df_slice['shift']
new_dfs_list.append(df_slice)

concat_df = pd.concat(new_dfs_list)  
print(concat_df)
symbol  open       shift    is_advancing    ratio
2020-05-03 00:28:00 BCH/BTC 0.029540    NaN NaN NaN
2020-05-03 00:35:00 BCH/BTC 0.029168    0.029540    -1.0    0.987407
2020-05-03 18:05:00 BCH/BTC 0.028265    0.029168    -1.0    0.969041
2020-05-03 00:28:00 BNB/BTC 0.001959    NaN NaN NaN
2020-05-03 17:58:00 XTZ/BTC 0.000306    NaN NaN NaN
2020-05-03 18:05:00 XTZ/BTC 0.000307    0.000306    1.0 1.000326

最新更新