为了账号安全,请及时绑定邮箱和手机立即绑定

将具有多个参数的函数应用于滚动 DataFrame Pandas

将具有多个参数的函数应用于滚动 DataFrame Pandas

HUH函数 2022-07-12 18:22:44
我有一个类似于下面的 Pandas DataFrame。请注意,这不需要采用这种格式,可以将其放回旋转方式,variable如果这样更容易,可以将每个列作为一列。      date      variable  value0   2014-01-31    item1  0.0708981   2014-02-28    item1  0.0647252   2014-03-31    item1  0.1012923   2014-04-30    item1  0.0418984   2014-05-31    item1  0.0948945   2014-06-30    item1  0.1102876   2014-07-31    item1  0.0818447   2014-08-31    item1  0.0438198   2014-09-30    item1  0.0091969   2014-10-31    item1  0.07648210  2014-11-30    item1  0.05590611  2014-12-31    item1  0.04202812  2015-01-31    item1  0.11546913  2015-02-28    item1  0.13045714  2015-03-31    item1  0.05431415  2015-04-30    item1  0.14128616  2015-05-31    item1  0.10938717  2015-06-30    item1  0.06615418  2015-07-31    item1  0.03939019  2015-08-31    item1  0.07127620  2015-09-30    item1  0.08878421  2015-10-31    item1  0.05423422  2015-11-30    item1  0.11185423  2015-12-31    item1  0.00505324  2016-01-31    item1  0.14595325  2016-02-29    item1  0.13805126  2016-03-31    item1  0.03039527  2016-04-30    item1  0.05584328  2016-05-31    item1  0.03796029  2016-06-30    item1  0.147318..         ...      ...       ...120 2015-09-30      ref  0.043185121 2015-10-31      ref  0.046849122 2015-11-30      ref  0.008139123 2015-12-31      ref  0.011222124 2016-01-31      ref  0.026408125 2016-02-29      ref  0.040404126 2016-03-31      ref  0.039585127 2016-04-30      ref  0.028782128 2016-05-31      ref  0.002799129 2016-06-30      ref  0.040413130 2016-07-31      ref  0.004451131 2016-08-31      ref  0.001946132 2016-09-30      ref  0.029548对于中的每个项目,variable我想应用一个滚动 12 个月的计算,该计算接受value该项目的滚动 12 个月和滚动 12 个月的值作为参数,其中variableequals ref。该函数的形式为:def func(series1,series2):   do something with series   return single_value_from_doiong_something我的问题是如何将两个不同的系列传递给这个函数来返回我的单个值。有谁知道如何做到这一点?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

关于您提到的功能,在您使用 a 重构原始数据框后join(),这可能更接近您所追求的:


combined = df[df['variable']!='ref'].set_index('date').join(df[df['variable']=='ref'].set_index('date'), lsuffix='', rsuffix='_ref').drop('variable_ref', axis=1)


def func(series, ref_series):


    #As an example

    return series.mean()/ref_series.mean()


combined.groupby('variable').rolling(12).apply(lambda x: func(x, combined.loc[x.index]['value_ref']), raw=False).drop('value_ref', axis=1)

此示例产生以下结果(NaN由于您的示例数据中存在差距):


                        value

variable date                

item1    2014-01-31       NaN

         2014-02-28       NaN

         2014-03-31       NaN

         2014-04-30       NaN

         2014-05-31       NaN

         2014-06-30       NaN

         2014-07-31       NaN

         2014-08-31       NaN

         2014-09-30       NaN

         2014-10-31       NaN

         2014-11-30       NaN

         2014-12-31       NaN

         2015-01-31       NaN

         2015-02-28       NaN

         2015-03-31       NaN

         2015-04-30       NaN

         2015-05-31       NaN

         2015-06-30       NaN

         2015-07-31       NaN

         2015-08-31       NaN

         2015-09-30  1.912186

         2015-10-31  1.793184

         2015-11-30  2.609254

         2015-12-31  3.009455

         2016-01-31  3.123833

         2016-02-29  2.910599

         2016-03-31  2.708132

         2016-04-30  2.497878

         2016-05-31  2.561760

         2016-06-30  2.681712


查看完整回答
反对 回复 2022-07-12
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号