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

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

这是我以前在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]
如您所见,时间是一个索引,每个股票代码都是相同的

任务是再制作两列,如下所示:

                       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']