首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最近的熊猫未来价值不等于当前行

最近的熊猫未来价值不等于当前行
EN

Stack Overflow用户
提问于 2017-09-28 22:47:02
回答 3查看 274关注 0票数 0

我有一个Pandas DataFrame,其中有一个列price和一个DateTimeIndex。我想创建一个新列,当price下次更改时增加1,如果减少则为0。多个连续行的值可能与price相同。

示例:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({"price" : [10, 10, 20, 10, 30, 5]}, index=pd.date_range(start="2017-01-01", end="2017-01-06"))

然后,产出应是:

代码语言:javascript
复制
2017-01-01     1
2017-01-02     1
2017-01-03     0
2017-01-04     1
2017-01-05     0
2017-01-06     NaN

在实践中,这个DF有大约20毫米的行,所以我真的在寻找一种矢量化的方法来这样做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-28 22:58:58

这里有一种方法可以做到:

  1. 计算价差并向上移动一次;
  2. 使用numpy.where给价格上涨的头寸分配一个,对价格下降的头寸分配零;
  3. 回填指示栏,因此不变值与下一个可用的观察值相同;

代码:

代码语言:javascript
复制
import numpy as np
price_diff = df.price.diff().shift(-1)
df['indicator'] = np.where(price_diff.gt(0), 1, np.where(price_diff.lt(0), 0, np.nan))
df['indicator'] = df.indicator.bfill()

df
#            price  indicator
#2017-01-01     10      1.0
#2017-01-02     10      1.0
#2017-01-03     20      0.0
#2017-01-04     10      1.0
#2017-01-05     30      0.0
#2017-01-06      5      NaN
票数 1
EN

Stack Overflow用户

发布于 2017-09-29 00:11:46

代码语言:javascript
复制
df['New']=(df-df.shift(-1))[:-1].le(0).astype(int)
df
Out[879]: 
            price  New
2017-01-01     10  1.0
2017-01-02     10  1.0
2017-01-03     20  0.0
2017-01-04     10  1.0
2017-01-05     30  0.0
2017-01-06      5  NaN
票数 1
EN

Stack Overflow用户

发布于 2017-09-28 22:58:31

使用移位:

代码语言:javascript
复制
sh = df['price'].shift(-1)
out = sh[~sh.isnull()] = df['price']<=sh

代码语言:javascript
复制
sh = df['price'].shift(-1)
out = np.where(sh.isnull(), np.nan, df['price']<=sh)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46479348

复制
相关文章

相似问题

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