如何根据y周创建日程安排系统

2024-04-25 05:06:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,其中有date、day和week列

我需要使用一年中的一周来创建一个新列,其值从1到5

假设我在第35周,第35周的所有专栏都应该有一个,第36周的专栏应该有两个,以此类推。 一旦达到第40周和第5周,新列中的数字需要从第41周的1开始,并以这种模式继续,无论数据范围有多长

def date_table(start='2019-08-26', end='2019-10-27'):
    df = pd.DataFrame({"Date": pd.date_range(start, end)})
    df["Day"] = df.Date.dt.weekday_name
    df["Week"] = df.Date.dt.weekofyear
    return df

Tags: 数据dataframedfdatedt模式数字start
1条回答
网友
1楼 · 发布于 2024-04-25 05:06:28

使用模和周数计算索引:

import pandas as pd

start='2019-08-26'
end='2019-10-27'
df = pd.DataFrame({"Date": pd.date_range(start, end)})
df["Day"] = df.Date.dt.weekday_name
df["Week"] = df.Date.dt.weekofyear
df["idx"] = df["Week"] % 5 +1        # n % 5 = 0..4 plus 1 == 1..5 

print(df)

输出:

0  2019-08-26     Monday    35    1
[...]
6  2019-09-01     Sunday    35    1
7  2019-09-02     Monday    36    2
[...]
13 2019-09-08     Sunday    36    2
14 2019-09-09     Monday    37    3
[...]
20 2019-09-15     Sunday    37    3
21 2019-09-16     Monday    38    4
[...]
27 2019-09-22     Sunday    38    4
28 2019-09-23     Monday    39    5
[...]
34 2019-09-29     Sunday    39    5
35 2019-09-30     Monday    40    1
[...]

[63 rows x 4 columns]

如果希望从开始,而不是从5个可除的周数开始,也可以通过减去第一周所有周数的模5值来实现:

# startweeknumber:
startweekmod = df["Week"][0] % 5

# offset by inital weeks mod
df["idx"] = (df["Week"] - startweekmod) % 5 + 1

相关问题 更多 >