将熊猫 iso 周数转换为常规周数



我有一个十年内证券的开盘价/高价/最低价/最后/变化/交易量值的下采样数据帧。 我正在尝试获取每周的样本计数,即我的缩减采样方法(在本例中为体积条)在整个数据集上每周采样多少个样本,以便我可以绘制它并与其他缩减采样方法进行比较。

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

我的代码如下:

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

所以我的问题是:就目前而言,以下示例日期时间索引

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 日历的工作方式而导致的这些出现结果的错误性质,我无法手动更正此行为。

提前非常感谢!

您可以使用以下函数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

最新更新