将Pandasiso周数转换为常规周数

2024-10-01 13:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它包含10年的安全数据,包括Open/High/Low/Last/Change/Volume值。 我试着得到每周的样本计数,也就是说,我的下采样方法做了多少个样本,在这个例子中是一个体积条,每周在整个数据集上采样,这样我就可以绘制它并与其他的下采样方法进行比较。在

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

我的代码如下:

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

所以我的问题是:下面的示例DateTimeIndex

^{pr2}$

变成

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

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

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

请记住,我无法手动更正此行为,因为数据集的大小以及ISO日历工作方式导致这些显示结果的不规则性。在

先谢谢你!在


Tags: 数据方法答案indexheredtisoyear
1条回答
网友
1楼 · 发布于 2024-10-01 13:32:12

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

相关问题 更多 >