首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pandas指定给定日期的周数?

如何使用pandas指定给定日期的周数?
EN

Stack Overflow用户
提问于 2021-04-12 16:34:58
回答 2查看 45关注 0票数 2

我有一个数据帧,使用

代码语言:javascript
复制
year_start = '2020-03-29'

year_end = '2021-04-10'

week_end_sat = pd.DataFrame(pd.date_range(year_start, year_end, freq=f'W-SAT'), columns=['a'])

既然我正在尝试制作一个总是在星期六结束的4-4-5日历,我如何才能创建另一个列来指定周数,使2020-03-29成为日历的第一天?

我想要的最终df是,

代码语言:javascript
复制
     a     |  count
2020-04-04 |    1
2020-04-11 |    2
.
.
.
2021-04-03 |    53   #since 2020 is a leap year there are 53 weeks otherwise it will be 52 weeks
2021-04-10 |    1
2021-04-17 |    2
.
2022-03-02 |    52
2022-04-09 |    1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-12 16:54:56

我认为您可以从给定year_start的第一天开始创建基准日期范围。

代码语言:javascript
复制
first_day_of_year = week_end_sat.iloc[0, 0].replace(day=1, month=1)
baseline = pd.Series(pd.date_range(first_day_of_year, periods=len(week_end_sat), freq=f'W-SAT'))

一年中基线的星期是您想要的。

代码语言:javascript
复制
week_end_sat['count'] = baseline['a'].dt.isocalendar().week
代码语言:javascript
复制
# print(week_end_sat)

            a  count
0  2020-04-04     1
1  2020-04-11     2
2  2020-04-18     3
3  2020-04-25     4
4  2020-05-02     5
5  2020-05-09     6
6  2020-05-16     7
7  2020-05-23     8
8  2020-05-30     9
9  2020-06-06    10
10 2020-06-13    11
11 2020-06-20    12
12 2020-06-27    13
13 2020-07-04    14
14 2020-07-11    15
15 2020-07-18    16
16 2020-07-25    17
17 2020-08-01    18
18 2020-08-08    19
19 2020-08-15    20
20 2020-08-22    21
21 2020-08-29    22
...
43 2021-01-30    44
44 2021-02-06    45
45 2021-02-13    46
46 2021-02-20    47
47 2021-02-27    48
48 2021-03-06    49
49 2021-03-13    50
50 2021-03-20    51
51 2021-03-27    52
52 2021-04-03    53
53 2021-04-10     1
票数 2
EN

Stack Overflow用户

发布于 2021-04-12 22:25:28

我使用W-Sat频率和isocalendar api计算周数并返回周数。然后,我使用一年中的第一天创建一个基线,并将周数字分配给baseline_week。现在,该周有一个关联的baseline_week编号。

代码语言:javascript
复制
 year_start = '2020-03-29'
 year_end = '2021-04-10'

 df = pd.DataFrame(pd.date_range(year_start, year_end, freq=f'W-SAT'),      columns=['week_date'])
 df['week_number']=df['week_date'].apply(lambda row: datetime.date(row.year, row.month, row.day).isocalendar()[1])

 first_day_of_year = df.iloc[0, 0].replace(day=1, month=1)
 baseline = pd.Series(pd.date_range(first_day_of_year, periods=len(df), freq=f'W-SAT'))

 df['baseline_date']=baseline
 df['baseline_week_number']=df['baseline_date'].apply(lambda row: datetime.date(row.year, row.month, row.day).isocalendar()[1])
 print(df)

输出:

代码语言:javascript
复制
 week_date  week_number baseline_date  baseline_week_number
 0  2020-04-04           14    2020-01-04                     1
 1  2020-04-11           15    2020-01-11                     2
 2  2020-04-18           16    2020-01-18                     3
 3  2020-04-25           17    2020-01-25                     4
 4  2020-05-02           18    2020-02-01                     5
 5  2020-05-09           19    2020-02-08                     6
 6  2020-05-16           20    2020-02-15                     7
 7  2020-05-23           21    2020-02-22                     8
 8  2020-05-30           22    2020-02-29                     9
 9  2020-06-06           23    2020-03-07                    10
 10 2020-06-13           24    2020-03-14                    11
 11 2020-06-20           25    2020-03-21                    12
 12 2020-06-27           26    2020-03-28                    13
 13 2020-07-04           27    2020-04-04                    14
 14 2020-07-11           28    2020-04-11                    15
 15 2020-07-18           29    2020-04-18                    16
 16 2020-07-25           30    2020-04-25                    17
 17 2020-08-01           31    2020-05-02                    18
 18 2020-08-08           32    2020-05-09                    19
 19 2020-08-15           33    2020-05-16                    20
 20 2020-08-22           34    2020-05-23                    21
 21 2020-08-29           35    2020-05-30                    22
 22 2020-09-05           36    2020-06-06                    23
 23 2020-09-12           37    2020-06-13                    24
 24 2020-09-19           38    2020-06-20                    25
 25 2020-09-26           39    2020-06-27                    26
 26 2020-10-03           40    2020-07-04                    27
 27 2020-10-10           41    2020-07-11                    28
 28 2020-10-17           42    2020-07-18                    29
 29 2020-10-24           43    2020-07-25                    30
 30 2020-10-31           44    2020-08-01                    31
 31 2020-11-07           45    2020-08-08                    32
 32 2020-11-14           46    2020-08-15                    33
 33 2020-11-21           47    2020-08-22                    34
 34 2020-11-28           48    2020-08-29                    35
 35 2020-12-05           49    2020-09-05                    36
 36 2020-12-12           50    2020-09-12                    37
 37 2020-12-19           51    2020-09-19                    38
 38 2020-12-26           52    2020-09-26                    39
 39 2021-01-02           53    2020-10-03                    40
 40 2021-01-09            1    2020-10-10                    41
 41 2021-01-16            2    2020-10-17                    42
 42 2021-01-23            3    2020-10-24                    43
 43 2021-01-30            4    2020-10-31                    44
 44 2021-02-06            5    2020-11-07                    45
 45 2021-02-13            6    2020-11-14                    46
 46 2021-02-20            7    2020-11-21                    47
 47 2021-02-27            8    2020-11-28                    48
 48 2021-03-06            9    2020-12-05                    49
 49 2021-03-13           10    2020-12-12                    50
 50 2021-03-20           11    2020-12-19                    51
 51 2021-03-27           12    2020-12-26                    52
 52 2021-04-03           13    2021-01-02                    53
 53 2021-04-10           14    2021-01-09                     1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67055127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档