将 pandas iso 周数转换为常规周数

Posted

技术标签:

【中文标题】将 pandas iso 周数转换为常规周数【英文标题】:Convert pandas iso week number to regular week number 【发布时间】:2019-08-20 05:12:50 【问题描述】:

我有一个数据框,其中包含十年来证券的开盘/高/低/最后/变化/成交量值的下采样。 我正在尝试获取每周的样本计数,即我的下采样方法有多少样本,在这种情况下是一个音量条,每周对整个数据集进行采样,以便我可以绘制它并与其他下采样方法进行比较。

到目前为止,我已经尝试按照here 和here 规定的答案在 df 中创建一个名为“Year-Week”的系列。 这些答案的问题在于,我的 EOY 日期(例如“1997-12-30”)由于this 答案中所述使用的 ISO 日历系统而被转换为“1997-01”,这在我应用时破坏了我的结果value_counts 方法。

我的代码如下:

volumeBar['Year/Week'] = (pd.Series(volumeBar.index).dt.year.astype(str) + "/" + pd.Series(volumeBar.index).dt.week.astype(str)).values

所以我的问题是:因为它代表以下示例 DateTimeIndex

Date
1997-12-22
1997-12-29
1997-12-30

变成

Year/Week
1997/52
1997/1
1997/1

我怎样才能得到以下预期结果?

Year/Week
1997/52
1997/52
1997/52

请记住,由于数据集的大小以及由于 ISO 日历的工作方式而出现的这些结果的不稳定性质,我无法手动更正此行为。

非常感谢!

【问题讨论】:

但是你真的可以接受 1997 年的最后一周有 10 天吗? 就本研究而言,这应该不是太大的问题。老实说,52 可能是 53,这不会打扰我,我只是不希望 EOY 的结果变成同年年初的结果 【参考方案1】:

您可以使用下面的函数 get_years_week 来获取没有 ISO 格式的年份和周数。

import pandas as pd
import datetime

a = 'Date': ['1997-11-29', '1997-12-22',
'1997-12-29',
'1997-12-30']

data  = pd.DataFrame(a)

data['Date'] = pd.to_datetime(data['Date'])

# Function for getting weeks and years
def get_years_week(data):

     # Get year from date
     data['year'] = data['Date'].dt.year

     # loop over each row of date column and get week number
     for i in range(len(data)):
         data['week'] = (((data['Date'][i] - datetime.datetime\
                          (data['Date'][i].year,1,1)).days // 7) + 1)

     # create column for week and year
     data['year/week'] = pd.Series(data_2['year'].astype('str'))\
                         + '/' + pd.Series(data_2['week'].astype('str'))  
     return data

【讨论】:

我用你的函数得到年/月,月总是等于 12.. 此函数将返回日期的周和年。当您将数据传递给此函数时,您是在尝试获取月份还是获取月份和年份。由于我创建了一个示例数据框,您可以将其作为参考并据此格式化您的日期。 我的错,我的意思是结果总是 YEAR/12,12 是“星期” 你能告诉我你输入的日期和你得到的结果吗?

以上是关于将 pandas iso 周数转换为常规周数的主要内容,如果未能解决你的问题,请参考以下文章

python - 如何将带有年份的周数转换为python pandas中的日期时间格式?

从Python中的ISO周数获取日期[重复]

VBA 将日期转换为周数

CMD 中的 ISO 周数

如何获取 ISO-8601 GMT/UTC 年周数

将日期列转换为周数、日期、月份、年份