我有一个如下所示的数据框。
symbol Range
Date
2018-08-16 spy 1.5
2018-08-17 spy 1.2
2018-08-16 spy 1.3
2018-08-17 spy 1.6
2017-07-17 spy 1.1
2017-07-18 spy 1.9
2018-08-16 nflx 4.5
2018-08-17 nflx 5.2
我添加了一个列,该列通过执行以下操作找到Range的第15个百分点:
df['Range_quantile'] = df.groupby(['symbol'])['Range'].transform(lambda x: np.percentile(x.unique(), 15))
从给定的行开始,如何按symbol
分组的方式将相同的功能仅应用于滚动的基础上的最后20行(组内),然后将输出重新添加为列({ 1}})添加到数据框?我的示例将Range_quantile_rolling
函数应用于整个lambda x: np.percentile(x.unique(), 15)
列。
例如,如果我要在groupby的最后3行中添加函数,它可能看起来像这样:
Range
答案 0 :(得分:2)
groupby
和transform
和lambda
df.assign(Range=df.groupby('symbol').Range.transform(
lambda x: x.rolling(3).apply(lambda y: np.percentile(np.unique(y), 15))
))
symbol Range
Date
2018-08-16 spy NaN
2018-08-17 spy NaN
2018-08-16 spy 1.23
2018-08-17 spy 1.23
2017-07-17 spy 1.16
2017-07-18 spy 1.25
2018-08-16 nflx NaN
2018-08-17 nflx NaN