首页 > 解决方案 > Pandas:按周数和年份字符串排序

问题描述

我有一个日期列表,这些日期变成了周数和年份;

dfweek['weeknum'] = df['Date'].dt.strftime('%U_%Y')

这将输出:34_2019

34 是 2019 年的第 34 周

自从订单出来后,我将如何按此字符串按时间顺序对数据进行排序:

00_2018
00_2019
01_2018
01_2019

我尝试通过以下方式转换回日期时间:

dfweek['weeknum1'] = pd.to_datetime(dfweek['weeknum'], format = '%W_%Y')

这一直返回错误: ValueError: Cannot use '%W' or '%U' without day and year

尝试以 %w 的形式添加一天,看看会发生什么

dfweek['weeknum'] = df['Date'].dt.strftime('%U_%Y_%w')
dfweek['weeknum1'] = pd.to_datetime(dfweek['weeknum'], format = '%W_%Y_%w')

但它只是吐回没有周数的原始日期

我想要的输出是

00_2018
01_2018
02_2018
...
51_2019
52_2019

标签: pythonpandasdatetime

解决方案


您可以使用以下内容进行排序:

dfweek = dfweek.assign(weeknum1= df['Date'].dt.strftime('%Y_%U')).sort_values('weeknum1')

在这里,我们使用格式例如“2018_00”创建了一个临时列weeknum1,然后使用这种格式进行排序。结果,它根据需要按年+周数排序。


推荐阅读