首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据集中查找上升值和下降值的差异

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

Stack Overflow用户
提问于 2020-05-03 22:38:16
回答 1查看 41关注 0票数 2

这是我以前在Excel中做过的事情,但是现在已经在python中尝试了,而且还有点卡住了。找不到库或本机函数。我想,shift()可以帮上忙,但我不知道在哪里可以使用它

没有必要把所有的代码都放在一个df里,它看起来更好看

我制作了一个由10个代码组成的漂亮数据集,下面是一个示例:

代码语言:javascript
复制
                       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]

正如您所看到的,时间是一个索引,每个代码都是相同的。

任务是使更多两个列如下所示:

代码语言:javascript
复制
                       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显示以前的值是高的、小的还是相同的。比率显示当前与先前的比率

我已经尽我所能解释了,但是如果有其他的问题,请随便问

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-03 22:58:57

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

代码语言:javascript
复制
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

如果你想在所有的标记上做这件事,你可以这样做。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61582558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档