我有一个这样的数据框。
Date price top
..............
1999-07-21 8.6912 9.674425
1999-07-22 8.6978 8.692583
1999-07-23 8.8127 10.760976
1999-07-24 8.8779 8.871057
..............
1999-07-27 8.8888 10.12344
...............
我想创建一个名为“ return”的新列。如果连续输入'price'>'top',那么我想用该行的价格返回和n + 5行的价格填充该行的'return'。
例如,在1999-07-22行中,价格大于最高价,因此我想在此行中用收益率07-22和07-27填充“收益率”,即(8.8888-8.6978)/ 8.6978(请注意,日期可能不连续,因为不包括节假日)。仅一小部分行满足需求。因此,“返回”中的大多数值都将丢失值。
能否请您告诉我如何在python中做到这一点?
答案 0 :(得分:1)
如有必要,首先创建DatetimeIndex
,然后使用Series.pct_change
,Series.shift
,最后使用Series.where
:
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
df['new'] = (df['price'].pct_change(5)
.shift(-5)
.where(df['price'] > df['top']))
print (df)