从python日期时间中提取一周并获取序列号?



我有一个数据框,其列名订单日期包含 2014 年 7 月至 2015 年 6 月的日期,格式为 2014-10-17 15:11:54。使用日期时间,我从日期中提取了周数。但是,我将 27 年 2014 月的起始周作为 2014 年 1 月的开始周,而不是 2015 年 1 月再次作为第 1 周开始。我想要的是 2014 年 7 月,因为第 1 周一直持续到 2015 年 6 月,并以 53 结束。

df['Week'] = df.order_date.dt.week 

使用上面的代码获取之后的周数,以获得 1 用于 2014 年 7 月使用

def time_period(x):
if df.Week >= 26:
return df.Week -25
else:
return df.Week +28
df['week_serial'] = df.Week.apply(lambda x: time_period(x))

这给出了一个错误 - 序列的真值不明确。使用 a.empty、a.bool((、a.item((、a.any(( 或 a.all((。

由于df.Week已经包含周数,因此该函数应如下所示:

def time_period(x):
ifx>= 26:
returnx-25
else:
returnx+28

但我认为你在这里基本上正在寻找一个模运算:

df['week_serial'] = (df['Week'] + 27)% 53+ 1

这将映射261272等;25映射532452等。

因此,对于示例输入:

>>> df
Week
0    13
1    49
2    47
3    12
4    35
5    17
6     1
7    46
8    19
9     0

我们获得:

>>> (df['Week'] + 27) % 53 + 1
0    41
1    24
2    22
3    40
4    10
5    45
6    29
7    21
8    47
9    28
Name: Week, dtype: int64

鉴于您已经有datetime.datetime对象,使用这些对象可能是最简单的。

首先,定义您的开始日期。

In [1]: import datetime
In [2]: start  = datetime.datetime(2014, 7, 1)
Out[2]: datetime.datetime(2014, 7, 1, 0, 0)

然后确定每个日期和开始之间的timedelta,并将其转换为天,然后是周。

In [3]: (datetime.datetime(2015, 3, 24) - start).days
Out[3]: 266
In [4]: (datetime.datetime(2015, 3, 24) - start).days // 7 + 1
Out[4]: 39

最新更新