使用另一列中的滚动值的数据框百分位数

时间:2019-11-14 17:52:32

标签: python pandas dataframe percentile

我将下面的数据框结构作为示例。

我想获得一个列,其中使用滚动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    ...

谢谢!

2 个答案:

答案 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参数。