Конвертировать номер недели в pandas iso в обычный номер недели - PullRequest
0 голосов
/ 29 марта 2019

У меня есть данные с пониженной частотой значений Open / High / Low / Last / Change / Volume для ценной бумаги за десять лет. Я пытаюсь получить еженедельное количество выборок, т. Е. Сколько выборок было выполнено моим методом пониженной выборки, в данном случае на шкале громкости, выборка в неделю по всему набору данных, чтобы я мог построить ее и сравнить с другими методами понижающей выборки.

До сих пор я пытался создать серию в df под названием «Год-неделя», следуя инструкциям здесь и здесь . Проблема с этими ответами состоит в том, что мои даты EOY, такие как «1997-12-30», преобразуются в «1997-01» из-за системы календаря ISO, используемой, как описано в этом ответе, что нарушает мои результаты когда я применяю метод 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.

Большое спасибо заранее!

1 Ответ

0 голосов
/ 29 марта 2019

Вы можете использовать приведенную ниже функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...