pandas 为DataFrame中的每个日期分配相对于月份的周数

06odsfpq  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(128)

让它成为下面的python pandas Dataframe 。

| date          | other_columns  |...
| ------------- | -------------- |...
| 2022-02-06    | row            |...
| 2022-02-07    | row            |...
| 2022-02-08    | row            |...
| 2022-02-15    | row            |...
| 2022-02-24    | row            |...
| 2022-02-28    | row            |...

我想将每个日期对应的周添加为一个附加的week列。它只是将天分组为7天的间隔来分配每个数字。我不想使用datetime.week的功能,我想让值与月份相关。

| date          | other_columns  |...| week     |
| ------------- | -------------- |...| -------- |
| 2022-02-06    | row            |...| 1 week   |
| 2022-02-07    | row            |...| 1 week   |
| 2022-02-08    | row            |...| 2 week   |
| 2022-02-15    | row            |...| 3 week   |
| 2022-02-24    | row            |...| 4 week   |
| 2022-02-28    | row            |...| 5 week   |

(1-7)对应第一周,(8-14)对应第二周,(15-21)对应第三周,(21-28)对应第四周,(29-31)对应第五周。真正重要的是日期,而不是月份。

ruarlubt

ruarlubt1#

你能用这样的东西吗?

import pandas as pd
import math

# create a date range
dr = pd.date_range(
    start="2022-02-01",
    end="2022-02-28",
    freq="D"
)

# create a dataframe
df = pd.DataFrame(
    {
        "date": dr
    }
)

# define a function to get the week number
def get_week_in_month(df, date_column):
    df["day"] = df[date_column].dt.day

    df["week"] = df["day"].apply(lambda x: math.ceil(x / 7))

    del df["day"]

    return df

# transform the dataframe
df = get_week_in_month(df, "date")

这将提供以下输出:

date    week
0   2022-02-01  1
1   2022-02-02  1
2   2022-02-03  1
3   2022-02-04  1
4   2022-02-05  1
5   2022-02-06  1
6   2022-02-07  1
7   2022-02-08  2
8   2022-02-09  2
9   2022-02-10  2
10  2022-02-11  2
11  2022-02-12  2
12  2022-02-13  2
13  2022-02-14  2
14  2022-02-15  3
15  2022-02-16  3
16  2022-02-17  3
17  2022-02-18  3
18  2022-02-19  3
19  2022-02-20  3
20  2022-02-21  3
21  2022-02-22  4
22  2022-02-23  4
23  2022-02-24  4
24  2022-02-25  4
25  2022-02-26  4
26  2022-02-27  4
27  2022-02-28  4

然后,您可以根据需要设置周数的格式。
您也可以使用下面的代码在一行中完成整个操作:

df["week"] = df["date"].dt.day.apply(lambda x: math.ceil(x / 7))
jpfvwuh4

jpfvwuh42#

用途:

df['date'] = pd.to_datetime(df['date'])

df['new2'] = ((df["date"].dt.day - 1) // 7 + 1).astype(str) + ' week'
print (df)
        date other_columns    new2
0 2022-02-06           row  1 week
1 2022-02-07           row  1 week
2 2022-02-08           row  2 week
3 2022-02-15           row  3 week
4 2022-02-24           row  4 week
5 2022-02-28           row  4 week

相关问题