多年來,我一直在反對試圖建立一個每周約會范圍大約一天,所以我想我會問一個人們可能比我知道得更多的地方。我的最終目標是將每日資料集與每周資料集合并,我需要這兩個資料集的日期一致,以便獲得我想要使用的 TimeSeries 庫 (DART) 來接受我的日期。我試圖生成這個看起來像這樣:
all_weeks_generated = pd.DataFrame()
all_weeks_generated['week_dt'] = pd.date_range(start = '2001-01-01', end = '2021-09-13', freq='W')
all_weeks_generated['week'] = all_weeks_generated['week_dt'].dt.isocalendar().week
all_weeks_generated['year'] = all_weeks_generated['week_dt'].dt.year
但這會吐出看起來非常錯誤的東西,例如:
all_weeks_generated[(all_weeks_generated.year == 2017) & (all_weeks_generated.week == 52)]
回傳:
week_dt week year
834 2017-01-01 52 2017
886 2017-12-31 52 2017
遺憾的是,2017 年 1 月 1 日不是 2017 年的第 52 周。我知道 Pandas 試圖告訴我 2017-01-01 是 2016 年的第 52 周,但我不確定該怎么做。這意味著我無法查看我的每日資料,確定它的周,然后得到它可能發生的一周的開始。我已經盡可能多地翻閱了 Pandas 檔案,但似乎我從根本上做錯了。關于我做錯了什么的任何提示,以及是否有一種方法可以修改我的方法或另一種方法,我可能會考慮哪些方法可以讓我列出幾周(我不知道 Mon vs Sun,只是想要一些有每周一次)從 2001 年 1 月 1 日開始到 2021 年 9 月 13 日結束?
uj5u.com熱心網友回復:
您可以在年初將所有等于 52 的周設定為 0:
>>> all_weeks_generated[(all_weeks_generated['week_dt'].dt.month.isin([1, 12]))
& (all_weeks_generated['week'] == 52)]
week_dt week year
51 2001-12-30 52 2001
103 2002-12-29 52 2002
155 2003-12-28 52 2003
207 2004-12-26 52 2004
260 2006-01-01 52 2006 # 52 -> 0
312 2006-12-31 52 2006
364 2007-12-30 52 2007
416 2008-12-28 52 2008
468 2009-12-27 52 2009
521 2011-01-02 52 2011 # 52 -> 0
573 2012-01-01 52 2012 # 52 -> 0
625 2012-12-30 52 2012
677 2013-12-29 52 2013
729 2014-12-28 52 2014
781 2015-12-27 52 2015
834 2017-01-01 52 2017 # 52 -> 0
886 2017-12-31 52 2017
938 2018-12-30 52 2018
990 2019-12-29 52 2019
1042 2020-12-27 52 2020
# 52 -> 0
all_weeks_generated.loc[(all_weeks_generated['week_dt'].dt.month == 1)
& (all_weeks_generated['week'] == 52), 'week'] = 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/333073.html
