我将下面的数据框结构作为示例。
我想获得一个列,其中使用滚动n期回溯,根据“百分比”列的值计算“价格列”的百分比。
有可能吗?我尝试使用某种lambda函数并使用.apply语法,但无法正常工作。
date percentile price desired_row
2019-11-08 0.355556 0.6863 36th percentile of price of last n period
2019-11-11 0.316667 0.6851 32nd percentile of price of last n period
2019-11-12 0.305556 0.6841 ...
2019-11-13 0.302778 0.6838 ...
2019-11-14 0.244444 0.6798 ...
谢谢!
答案 0 :(得分:0)
您可以在熊猫中使用滚动方法。例如:
df = pd.DataFrame({'B': [0, 1, 2, 2, 4]})
df['rolling_mean'] = df['B'].rolling(2).mean()
将在“ B”列的两个期间滚动平均值处创建一个新列。如果需要计算其他汇总统计信息,则可以应用不同的方法,例如:
df['rolling_sum'] = df['B'].rolling(2).sum()
有关更多功能,请参见: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html
答案 1 :(得分:0)
基于this answer,您可以在列价格上使用rolling
,将百分位列在索引中,然后在apply
中将quantile
与参数{{1}一起使用}:
raw=False
您可以根据需要在window = 3
df['desired_row'] = df.set_index('percentile')['price'].rolling(window)\
.apply(lambda x: x.quantile(q=x.index[-1]), raw=False).values
print (df)
date percentile price desired_row
0 2019-11-08 0.355556 0.6863 NaN
1 2019-11-11 0.316667 0.6851 NaN
2 2019-11-12 0.305556 0.6841 0.684711
3 2019-11-13 0.302778 0.6838 0.683982
4 2019-11-14 0.244444 0.6798 0.681756
中更改interpolation
参数。