作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从日期中提取月份中的星期列。
虚拟数据:
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,依此类推。
谁能帮我解决这个问题?
最佳答案
您可以转换为周周期并减去该月的第一周 + 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
关于python - 从日期获取月份的第几周列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74026920/
我不太擅长处理日期时间。我用了momentjs用于操纵时间的 ionic 应用,但我想实现一些我无法做到的事情。 我为此使用了一个管道,我想根据已经过去了多少天或者几周、几个月或几年来显示。使用相对时
我是一名优秀的程序员,十分优秀!