我有一个降低采样的Open / High / Low / Last / Change / Volume值的数据框,用于十年以上的证券。 我试图获取每周的样本计数,即我的下采样方法(在本例中为音量条)中有多少个样本每周在整个数据集中采样,以便我可以将其绘制出来并与其他下采样方法进行比较。
到目前为止,我已经尝试按照here和here给出的答案在DF中创建一个名为“ Year-Week”的系列。
这些答案的问题在于,由于this答案中所述的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
所以我的问题是:就目前而言,以下示例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日历的工作方式而导致的这些显示结果的易变性,我无法手动更正此行为。
非常感谢!
答案 0 :(得分:0)
您可以使用下面的函数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