Python : 按周拆分 datetime 日期

Python : Split datetime dates on a weekly basis

我有包含印度国家证券交易所 Banknifty 指数的 EOD OHLC 的数据集。

目标:我想每周拆分一次 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)) 

下面是上面代码的输出:

虽然我认为输出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'))]
for df_of_the_week in weeks:
    display(df_of_the_week)
    # Perform any operation on df_of_the_week here