Python 查找数据集中上升值和下降值的差异
这是我以前在Excel中做过的事情,但现在在python中尝试,有点卡住了。找不到该函数的库或本机函数。我想,shift()会有帮助,但我不知道在哪里可以使用它 没有必要把所有的股票都放在一个df中,它只是看起来更好 我制作了一个包含10个股票代码的数据集,下面是一个示例:Python 查找数据集中上升值和下降值的差异,python,pandas,Python,Pandas,这是我以前在Excel中做过的事情,但现在在python中尝试,有点卡住了。找不到该函数的库或本机函数。我想,shift()会有帮助,但我不知道在哪里可以使用它 没有必要把所有的股票都放在一个df中,它只是看起来更好 我制作了一个包含10个股票代码的数据集,下面是一个示例: symbol open 2020-05-03 00:28:00 BCH/BTC 0.0295400000 2020-05-03 00:35:0
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]
如您所见,时间是一个索引,每个股票代码都是相同的
任务是再制作两列,如下所示:
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]
是否前进显示先前的值是否更高、更小或相同比率显示当前和以前的比率
我试着尽可能完整地解释它,但是如果有任何其他问题,请随时询问您使用shift的方法是正确的。可以使用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
df=pd.read_剪贴板(sep=r“[{2,}”)
打印(df)
符号打开
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)
条件=[df['open']>df['shift'],df['open']==df['shift'],df['open']
如果你想在所有的股票上都这么做,你可以这样做
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
打印(df)
符号打开
2020-05-03 00:28:00BCH/BTC 0.029540
2020-05-03 00:35:00BCH/BTC 0.029168
2020-05-03 18:05:00BCH/BTC 0.028265
2020-05-03 00:28:00BNB/BTC 0.001959
2020-05-03 17:58:00XTZ/BTC 0.000306
2020-05-03 18:05:00 XTZ/BTC 0.000307
symbols_list=df['symbol'].unique().tolist()
新的dfs列表=[]
对于符号列表中的符号:
df\u slice=df[df['symbol']==s]。复制()
df_slice['shift']=df_slice['open'].astype(float).shift(1)
条件=[df_切片['open']>df_切片['shift'],df_切片['open']==df_切片['shift'],df_切片['open']
您的轮班计划是正确的。可以使用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
df=pd.read_剪贴板(sep=r“[{2,}”)
打印(df)
符号打开
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)
条件=[df['open']>df['shift'],df['open']==df['shift'],df['open']
如果你想在所有的股票上都这么做,你可以这样做
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
打印(df)
符号打开
2020-05-03 00:28:00BCH/BTC 0.029540
2020-05-03 00:35:00BCH/BTC 0.029168
2020-05-03 18:05:00BCH/BTC 0.028265
2020-05-03 00:28:00BNB/BTC 0.001959
2020-05-03 17:58:00XTZ/BTC 0.000306
2020-05-03 18:05:00 XTZ/BTC 0.000307
symbols_list=df['symbol'].unique().tolist()
新的dfs列表=[]
对于符号列表中的符号:
df_slice=df[df['symbol']==s].copy()
df_slice['shift']=df_slice['open'].astype(float).shift(1)
条件=[df_切片['open']>df_切片['shift'],df_切片['open']==df_切片['shift'],df_切片['open']