У меня есть набор данных, содержащий EOD OHLC для индекса Banknifty Национальной фондовой биржи Индии.

Цель: я хочу разделить данные OHLC на еженедельной основе.

Вы можете получить соответствующие данные, используя приведенный ниже код:

from nsepy import get_history
from datetime import date

bankniftydata = get_history(symbol='BANKNIFTY',start=date(2016,5,30),end=date(2016,6,10),index=True)

print(bankniftydata)

Я загрузил эти данные в виде файла .csv и преобразовал их в формат datetime, используя следующий код:

df['Date'] = pd.to_datetime(df['Date'])

Следующий вывод

введите описание изображения здесь

Я также пробовал использовать приведенный ниже код для еженедельного разбиения вышеуказанного набора данных, но мне не удается разделить сгенерированный список на еженедельные наборы данных или DataFrame, которым я могу манипулировать :

weeks = [g for n, g in df.groupby(pd.Grouper(key='Date',freq='W'))]
print((weeks)) 

Следующий вывод приведенного выше кода:

введите описание изображения здесь

faktiman

Ответов: 1

Ответы (1)

Хотя я думаю, что вывод 2 является ответом, следующий код дает результат в виде DataFrames:

import numpy as np
import pandas as pd
from nsepy import get_history
from datetime import date

bankniftydata = get_history(symbol='BANKNIFTY',start=date(2016,5,30),end=date(2016,6,10),index=True)

df = bankniftydata.reset_index()

df['Date'] = pd.to_datetime(df['Date'])
display(df.head(2))
weeks = set(list(df["Date"].dt.week))

for i in weeks:
    df_of_that_week = df[df["Date"].dt.week == i]
    display(df_of_that_week)

Вывод выглядит следующим образом:

    Date    Open    High    Low     Close   Volume  Turnover
0   2016-05-30  17580.85    17666.05    17484.8     17520.65    96747582    2.371690e+10
1   2016-05-31  17615.10    17648.25    17462.2     17620.90    115964022   3.491600e+10

    Date    Open    High    Low     Close   Volume  Turnover
0   2016-05-30  17580.85    17666.05    17484.80    17520.65    96747582    2.371690e+10
1   2016-05-31  17615.10    17648.25    17462.20    17620.90    115964022   3.491600e+10
2   2016-06-01  17670.85    17670.85    17392.85    17423.45    99164561    2.547940e+10
3   2016-06-02  17405.15    17596.40    17350.45    17567.80    78335336    2.242660e+10
4   2016-06-03  17657.20    17762.05    17649.05    17680.80    89366456    2.670520e+10

    Date    Open    High    Low     Close   Volume  Turnover
5   2016-06-06  17710.45    17754.15    17636.90    17671.40    81251372    2.190330e+10
6   2016-06-07  17796.55    18000.95    17713.35    17948.15    167578972   4.195310e+10
7   2016-06-08  17976.25    17995.80    17855.20    17946.80    123360967   2.819240e+10
8   2016-06-09  17955.80    17986.15    17801.55    17887.70    107528433   2.437910e+10
9   2016-06-10  17830.20    18051.50    17815.25    17828.60    94174779    2.392430e+10

Также, исходя из кода для вывода 2, доступ к DataFrames можно получить и изменить следующим образом:

weeks = [g for n, g in df.groupby(pd.Grouper(key='Date',freq='W'))]
для df_of_the_week в weeks:
    display(df_of_the_week)
    # Выполните любую операцию над df_of_the_week здесь

2022 WebDevInsider