我想從日期中提取月份列中的星期。
虛擬資料:
data = pd.DataFrame(pd.date_range(' 1/ 1/ 2000', periods = 100, freq ='D'))
我試過的代碼:
def add_week_of_month(df):
df['monthweek'] = pd.to_numeric(df.index.day/7)
df['monthweek'] = df['monthweek'].apply(lambda x: math.ceil(x))
return df
但是這段代碼確實計算了一個月內的 7 天周期。一個月的前 7 天為 1,從第 8 天到第 14 天為 2,依此類推
但我想要的是每個月的日歷周,所以在每月的第一天,該功能將為 1,從之后的第一個星期一開始,它將為 2,依此類推。
誰能幫我這個?
uj5u.com熱心網友回復:
如果是星期一,您可以轉換為每周周期并減去該月的第一周 1。
如果您想從星期日開始幾周,請使用“W-SAT”作為句點和start.dt.dayofweek.eq(6).
# get first day of month
start = data[0] pd.offsets.MonthBegin() pd.offsets.MonthBegin(-1)
# or
# start = data[0].dt.to_period('M').dt.to_timestamp()
data['monthweek'] = ((data[0].dt.to_period('W')-start.dt.to_period('W'))
.apply(lambda x: x.n)
.add(start.dt.dayofweek.eq(0))
)
注意。在您的輸入中,列0是日期。
輸出:
0 monthweek
0 2000-01-01 0
1 2000-01-02 0
2 2000-01-03 1 # Monday
3 2000-01-04 1
4 2000-01-05 1
5 2000-01-06 1
6 2000-01-07 1
7 2000-01-08 1
8 2000-01-09 1
9 2000-01-10 2 # Monday
10 2000-01-11 2
.. ... ...
95 2000-04-05 1
96 2000-04-06 1
97 2000-04-07 1
98 2000-04-08 1
99 2000-04-09 1
[100 rows x 2 columns]
2001 年的示例(從星期一開始):
0 monthweek
0 2001-01-01 1 # Monday
1 2001-01-02 1
2 2001-01-03 1
3 2001-01-04 1
4 2001-01-05 1
5 2001-01-06 1
6 2001-01-07 1
7 2001-01-08 2 # Monday
8 2001-01-09 2
9 2001-01-10 2
10 2001-01-11 2
11 2001-01-12 2
12 2001-01-13 2
13 2001-01-14 2
14 2001-01-15 3
uj5u.com熱心網友回復:
獲取第一天,然后將其添加到該月的某天并除以 7
first_day = dt.replace(day=1)
dom = dt.day
adjusted_dom = dom first_day.weekday()
return int(math.ceil(adjusted_dom/7.0))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514680.html
上一篇:了解日期類
下一篇:兩個字串型別日期之間的天數
