亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將具有多個參數的函數應用于滾動 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 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號