简体   繁体   English

在整个数据帧传递给函数的数据帧的滚动窗口上应用函数

[英]apply a function on rolling window in Dataframe where whole dataframe is passed to function

I have a dataframe of 5 columns indexed by YearMo: 我有一个由YearMo索引的5列的数据框:

yearmo = np.repeat(np.arange(2000, 2010) * 100, 12) + [x for x in range(1,13)] * 10 
rates = pd.DataFrame(data=np.random.random(120, 5)), 
                     index=pd.Series(data=yearmo, name='YearMo'), 
                     columns=['A', 'B','C', 'D', 'E'])

rates.head()                       
YearMo    A         B          C         D       E 
200411  0.237696  0.341937  0.258713  0.569689  0.470776
200412  0.601713  0.313006  0.221821  0.720162  0.889891
200501  0.024379  0.761315  0.225032  0.293682  0.302431
200502  0.996778  0.388783  0.026448  0.056188  0.744850
200503  0.942024  0.768416  0.484236  0.102904  0.287446

What I would like to do is to be able to apply a rolling window and pass all five columns to a function – something like: 我想做的是能够应用滚动窗口并将所有五列传递给一个函数-类似于:

rates.rolling(window=60, min_periods=60).apply(lambda x: my_func(data=x, param=5)

but this approach applies the function to each column. 但是这种方法将函数应用于每一列。 Specifying axis=1 doesn't do anything either.... 指定axis=1也不执行任何操作。

Question : ... apply a rolling window and pass all five columns to a function 问题 :...应用滚动窗口并将所有五列传递给函数

This will do what you want, min_periods=5, axis=1 . 这将满足您的要求, min_periods=5, axis=1 .rolling(... window is column 'A':'E' or a multiple of 5 . .rolling(...窗口是列'A':'E'或5的倍数。

def f1(data=None):
    print('f1(%s, %s) data=%s' % (str(type(data)), param, data))
    return data.sum()

subRates = rates.rolling(window=60, min_periods=5, axis=1).apply(lambda x: f1( x ) )

Input : 输入

               A         B         C         D         E
YearMo
200001  0.666744  0.569194  0.546873  0.018696  0.240783
200002  0.035888  0.853077  0.348200  0.921997  0.283177
200003  0.652761  0.076630  0.298076  0.800504  0.041231
200004  0.537397  0.968399  0.211072  0.328157  0.929783
200005  0.759506  0.702220  0.807477  0.886935  0.022587

Output : 输出

f1(<class 'numpy.ndarray'>, None) data=[ 0.66674393  0.56919434  0.54687296  0.01869609  0.24078329]
f1(<class 'numpy.ndarray'>, None) data=[ 0.03588751  0.85307707  0.34819965  0.92199698  0.28317727]
f1(<class 'numpy.ndarray'>, None) data=[ 0.65276067  0.07663029  0.29807589  0.80050448  0.04123137]
f1(<class 'numpy.ndarray'>, None) data=[ 0.53739687  0.96839917  0.21107155  0.32815687  0.92978308]
f1(<class 'numpy.ndarray'>, None) data=[ 0.75950632  0.70222034  0.80747698  0.88693524  0.02258685]
         A   B   C   D         E
YearMo
200001 NaN NaN NaN NaN  2.042291
200002 NaN NaN NaN NaN  2.442338
200003 NaN NaN NaN NaN  1.869203
200004 NaN NaN NaN NaN  2.974808
200005 NaN NaN NaN NaN  3.178726

Tested with Python:3.4.2 - pandas:0.19.2 使用Python:3.4.2测试-熊猫:0.19.2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 熊猫滚动应用功能到整个窗口数据框 - Pandas rolling apply function to entire window dataframe 在滚动窗口上的pandas数据框上应用自定义功能 - apply custom function on pandas dataframe on a rolling window 在pandas DataFrame的滚动切片上应用函数 - Apply function on a rolling slice of a pandas DataFrame 在DataFrame上应用具有多个参数的滚动功能 - Apply a rolling function with multiple arguments on a DataFrame 将具有多个参数的函数应用于滚动 DataFrame Pandas - Apply function with multiple arguments to rolling DataFrame Pandas 在具有多个参数的 Pandas 数据帧上应用滚动函数 - Apply rolling function on pandas dataframe with multiple arguments 将Pandas系列串function应用于整个dataframe - Apply Pandas series string function to the whole dataframe 将函数应用于多索引DataFrame上的滚动窗口,每个日期和类别仅获得一个汇总结果 - Apply function to rolling window on multi-indexed DataFrame, get only one aggregated result per date and category 将函数(MinCovDet)应用到Pandas Dataframe滚动窗口(nxm数组) - Apply Function (MinCovDet) to a Pandas Dataframe rolling window (n x m array) In Pandas, how do I apply a function to a row of a dataframe, where each item in the row should be passed to the function as an argument? - In Pandas, how do I apply a function to a row of a dataframe, where each item in the row should be passed to the function as an argument?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM