There are a few similar questions in this site, but I couldn't find out a solution to my particular question.
I have a dataframe that I want to process with a custom function (the real function has a bit more pre-procesing, but the gist is contained in the toy example fun).
import statsmodels.api as sm
import numpy as np
import pandas as pd
mtcars=pd.DataFrame(sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data)
def fun(col1, col2, w1=10, w2=2):
    return(np.mean(w1 * col1 + w2 * col2))
# This is the behavior I would expect for the full dataset, currently working
mtcars.apply(lambda x: fun(x.cyl, x.mpg), axis=1)
# This was my approach to do the same with a rolling function
mtcars.rolling(3).apply(lambda x: fun(x.cyl, x.mpg))
The rolling version returns this error:
AttributeError: 'Series' object has no attribute 'cyl'
I figured I don't fully understand how rolling works, since adding a print statement to the beginning of my function shows that fun is not getting the full dataset but an unnamed series of 3. What is the approach to apply this rolling function in pandas?
Just in case, I am running
>>> pd.__version__
'1.5.2'
Update
Looks like there is a very similar question here which might partially overlap with what I'm trying to do.
For completeness, here's how I would do this in R with the expected output.
library(dplyr)
fun <- function(col1, col2, w1=10, w2=2){
  return(mean(w1*col1 + w2*col2))
}
mtcars %>% 
  mutate(roll = slider::slide2(.x = cyl,
                               .y = mpg, 
                               .f = fun, 
                               .before = 1, 
                               .after = 1))
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb     roll
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4      102
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 96.53333
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1     96.8
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 101.9333
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2 105.4667
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1    107.4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4 97.86667
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2 94.33333
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2 90.93333
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4     93.2
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4 102.2667
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3 107.6667
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3    112.6
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3    108.6
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4      104
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4 103.6667
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4      105
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1      105
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2 104.4667
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1     97.2
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1    100.6
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2 101.4667
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2 109.3333
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4    111.8
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2 106.5333
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1 101.6667
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2     95.8
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2 101.4667
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4 103.9333
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6      107
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8     97.4
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2     96.4
 
     
     
    
