簡體   English   中英

應用和 lambda function 在 DataFrame 列上導致的鍵錯誤

[英]Key Error resulting from apply and lambda function on DataFrame column

我從這個 df 生成了一個新列,顯示一年中的第 7 個工作日和月份:

      YearOfSRC MonthNumberOfSRC    
0       2022             3    
1       2022             4          
2       2022             5             
3       2022             6            
4       2021             4   
... ... ... ...
20528   2022             1             
20529   2022             2             
20530   2022             3            
20531   2022             4             
20532   2022             5             

使用此代碼:

df['PredictionDate'] = (pd
 .to_datetime(df[['YearOfSRC', 'MonthNumberOfSRC']]
                .set_axis(['year' ,'month'], axis=1)
                .assign(day=1)
              )
 .sub(pd.offsets.BusinessDay(1))
 .add(pd.offsets.BusinessDay(7))
)

到 output 這個 dataframe ( df_final ) 與新列PredictionDate

       YearOfSRC    MonthNumberOfSRC    PredictionDate
0       2022             3              2022-03-09
1       2022             4              2022-04-11
2       2022             5              2022-05-10
3       2022             6              2022-06-09
4       2021             4              2021-04-09
... ... ... ...
20528   2022             1              2022-01-11
20529   2022             2              2022-02-09
20530   2022             3              2022-03-09
20531   2022             4              2022-04-11
20532   2022             5              2022-05-10

(更多細節在這里

但是,我想利用CustomBusinessDay和 Python 的Holiday package 來修改PredictionDate的行,其中第一周的假期會將第 7 個工作日推遲 1 個工作日。 我知道CustomBusinessDay有一個假期列表的參數,因此在模塊化解決方案中,我會將holiday庫中的列表分配給該參數。 我知道我可以通過將第一周有假期的所有月份的天數增加 1 來對添加的工作日進行硬編碼,但我更喜歡更具動態性的解決方案。 我已經嘗試過這個而不是上面的代碼,但我得到了一個 KeyError:

df_final['PredictionDate'] = (pd
 .to_datetime(df_final[['YearOfSRC', 'MonthNumberOfSRC']]
                .set_axis(['year' ,'month'], axis=1)
                .assign(day=1)
              )
 .sub(df_final.apply(lambda x : pd.offsets.CustomBusinessDay(1, holidays = holidays.US(years = x['YearOfSRC']).keys())))
 .add(df_final.apply(lambda x: pd.offsets.CustomBusinessDay(7, holidays = holidays.US(years = x['YearOfSRC']).keys())))
)

KeyError: 'YearOfSRC'

我確定我在這里實現了 pandas applylambda功能不正確,但我不知道為什么錯誤會是一個關鍵錯誤,因為這顯然是df_final中的一列。

編輯我仍在尋找解決此問題的方法,因此對這個問題給予了 100 分的賞金。 請試一試!

根據我上面的評論,試試這個:

df_final['PredictionDate'] = (pd
 .to_datetime(df_final[['YearOfSRC', 'MonthNumberOfSRC']]
                .set_axis(['year' ,'month'], axis=1)
                .assign(day=1)
              )
 .sub(df_final.apply(lambda x : pd.offsets.CustomBusinessDay(1, holidays = holidays.US(year = x['YearOfSRC']).items()), axis=1))
 .add(df_final.apply(lambda x: pd.offsets.CustomBusinessDay(7, holidays = holidays.US(year = x['YearOfSRC']).items()), axis=1))
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM