将 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 周数转换为常规周数的主要内容,如果未能解决你的问题,请参考以下文章