|
15 | 15 | __all__ = ['rolling_count', 'rolling_max', 'rolling_min',
|
16 | 16 | 'rolling_sum', 'rolling_mean', 'rolling_std', 'rolling_cov',
|
17 | 17 | 'rolling_corr', 'rolling_var', 'rolling_skew', 'rolling_kurt',
|
18 |
| - 'rolling_quantile', 'rolling_median', 'ewma', 'ewmvar', 'ewmstd', |
19 |
| - 'ewmvol', 'ewmcorr', 'ewmcov'] |
| 18 | + 'rolling_quantile', 'rolling_median', 'rolling_apply', |
| 19 | + 'ewma', 'ewmvar', 'ewmstd', 'ewmvol', 'ewmcorr', 'ewmcov'] |
20 | 20 |
|
21 | 21 | def rolling_count(arg, window, time_rule=None):
|
22 | 22 | """
|
@@ -350,3 +350,27 @@ def call_cython(arg, window, minp):
|
350 | 350 | return _tseries.roll_quantile(arg, window, minp, quantile)
|
351 | 351 | return _rolling_moment(arg, window, call_cython, min_periods,
|
352 | 352 | time_rule=time_rule)
|
| 353 | + |
| 354 | +def rolling_apply(arg, window, func, min_periods=None, time_rule=None): |
| 355 | + """Generic moving function application |
| 356 | +
|
| 357 | + Parameters |
| 358 | + ---------- |
| 359 | + arg : Series, DataFrame |
| 360 | + window : Number of observations used for calculating statistic |
| 361 | + func : function |
| 362 | + Must produce a single value from an ndarray input |
| 363 | + min_periods : int |
| 364 | + Minimum number of observations in window required to have a value |
| 365 | + time_rule : {None, 'WEEKDAY', 'EOM', 'W@MON', ...}, default=None |
| 366 | + Name of time rule to conform to before computing statistic |
| 367 | +
|
| 368 | + Returns |
| 369 | + ------- |
| 370 | + y : type of input argument |
| 371 | + """ |
| 372 | + def call_cython(arg, window, minp): |
| 373 | + minp = _use_window(minp, window) |
| 374 | + return _tseries.roll_generic(arg, window, minp, func) |
| 375 | + return _rolling_moment(arg, window, call_cython, min_periods, |
| 376 | + time_rule=time_rule) |
0 commit comments