python - 从星期日开始将第 53 周和第 1 周设为同一周
问题描述
嗨,我有以下数据:
索引、星期几、星期数、Fecha
360 Friday 52 2019-12-27
361 Saturday 52 2019-12-28
362 Sunday 53 2019-12-29
363 Monday 53 2019-12-30
364 Tuesday 53 2019-12-31
365 Wednesday 1 2020-01-01
366 Thursday 1 2020-01-02
367 Friday 1 2020-01-03
368 Saturday 1 2020-01-04
369 Sunday 2 2020-01-05
370 Monday 2 2020-01-06
我想:
- 包含 1 月 1 日的那一周是第 1 周
- 星期从星期日开始
- 将第 1 周作为 7 天的整周,这意味着 12 月 29 日、30 日和 31 日到也得到第 1 周
。-当我在这个数据集中有很多年时,也可以让它工作。
在这个特殊的年份,这意味着将所有 53 更改为 1,但我认为在其他年份这可能行不通。所以为了得到一个一般规则,我意识到如果一月一号是星期天,我不需要改变任何东西,所以我想每年都先检查一下,如果一月一号不是星期天将前一个星期日和那个星期天之间的所有周数都更改为 1。我想到的另一个选择是找出前一个星期日的星期数,然后将那一年的所有周数更改为与前一个星期日相同的数字,到 1. 对于这两个我都需要在 df 中做一个条件来只过滤掉某些行但是当我只想显示该 df 的一列时我该怎么做?意思是如果我会这样做:
totals[(totals['Fecha'].dt.month==1) & (totals['Fecha'].dt.day==1) & (totals['Fecha'].dt.year==i)]
那么这将显示所有列的总数,而我想要这些条件并且只看到“工作日”列。
那么我将如何做到这一点,而且,这对我来说听起来超级复杂。有没有我忽略的更简单/更有效的方法?
谢谢!
解决方案
所以这就是我最终想出的。这种表现如何明智?
totals['Fecha']=pd.to_datetime(totals['Fecha'], format='%d/%m/%Y') #change type to datetime
totals['Day of week']=totals['Fecha'].dt.weekday_name #create day of week 'Sunday, Monday, etc'
totals['Week no']=totals['Fecha'].dt.strftime('%U').astype(int)+1 #create week no's with Sunday as first day of week
for i in set(totals['Fecha'].dt.year):
if i!=2019: #because for the first year we don't have a previous end of year
first_day_of_year=str(i)+'-01-01'
# if there are any rows where the day of the week of the first day of the year equals 'Sunday'
if any(totals['Day of week'].where(totals['Fecha']==first_day_of_year)!='Sunday'):
# then for the year before, change all the last week no's to one
last_week=max(totals['Week no'].where(totals['Fecha'].dt.year==i-1))
totals.loc[(totals['Week no']==last_week)&(totals['Fecha'].dt.year==i-1), 'Week no']=1
print(totals[['Day of week', 'Week no', 'Fecha']])
推荐阅读
- r - 如何计算特定列中具有 NA 值的行数?
- python - 来自 JSON 的真实数据元素
- asp.net - 从 WCF 服务连接交换服务器时出错
- rest - Splunk REST API - 如何向已保存的搜索添加额外字段?
- python - 使用外键比较两个模型的字段。(用于在正确的类别下显示正确的产品)使用 django
- html - 如何使内容的宽度等于图像的宽度?
- aws-api-gateway - AWS API Gateway HTTP API CORS 预检请求
- java - 如何在 apache-flink 中创建动态规则?
- javascript - 如何为 JavaScript 制作键盘(数字)
- facebook - 根据关键字搜索 Facebook 帖子 Facebook API