我有一个Pandas DataFrame,其中有一个列price和一个DateTimeIndex。我想创建一个新列,当price下次更改时增加1,如果减少则为0。多个连续行的值可能与price相同。
示例:
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"))然后,产出应是:
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毫米的行,所以我真的在寻找一种矢量化的方法来这样做。
发布于 2017-09-28 22:58:58
这里有一种方法可以做到:
numpy.where给价格上涨的头寸分配一个,对价格下降的头寸分配零;代码:
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发布于 2017-09-29 00:11:46
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发布于 2017-09-28 22:58:31
使用移位:
sh = df['price'].shift(-1)
out = sh[~sh.isnull()] = df['price']<=sh或
sh = df['price'].shift(-1)
out = np.where(sh.isnull(), np.nan, df['price']<=sh)https://stackoverflow.com/questions/46479348
复制相似问题