AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79203402
Accepted
Sun Jar
Sun Jar
Asked: 2024-11-19 20:19:41 +0800 CST2024-11-19 20:19:41 +0800 CST 2024-11-19 20:19:41 +0800 CST

Pandas reamostram dados de estoque de 5 minutos não alinhados

  • 772

Tenho alguns dados de estoque de 5 minutos, como:

                  Date   Open   High    Low  Close    Volume
0  2024-11-19 09:35:00  11.75  11.79  11.55  11.78  32673600
1  2024-11-19 09:40:00  11.78  11.81  11.73  11.79  14802700
2  2024-11-19 09:45:00  11.79  11.84  11.79  11.82  13837400
3  2024-11-19 09:50:00  11.81  11.83  11.76  11.82   8534200
4  2024-11-19 09:55:00  11.82  11.87  11.80  11.87   8540500
5  2024-11-19 10:00:00  11.87  11.96  11.87  11.90  20659800
6  2024-11-19 10:05:00  11.89  11.90  11.82  11.82  11691000
7  2024-11-19 10:10:00  11.82  11.82  11.73  11.74   8762900
8  2024-11-19 10:15:00  11.74  11.74  11.71  11.73   6870500
9  2024-11-19 10:20:00  11.73  11.73  11.68  11.70   6244800
10 2024-11-19 10:25:00  11.70  11.70  11.66  11.69   5083000
11 2024-11-19 10:30:00  11.70  11.73  11.69  11.71   5342400
12 2024-11-19 10:35:00  11.72  11.74  11.71  11.73   3311800
13 2024-11-19 10:40:00  11.73  11.74  11.71  11.72   2331900
14 2024-11-19 10:45:00  11.72  11.72  11.70  11.72   3024100
15 2024-11-19 10:50:00  11.71  11.74  11.70  11.71   2774200
16 2024-11-19 10:55:00  11.70  11.72  11.70  11.71   1313000
17 2024-11-19 11:00:00  11.72  11.75  11.71  11.74   1737400
18 2024-11-19 11:05:00  11.75  11.75  11.73  11.75   1690600
19 2024-11-19 11:10:00  11.74  11.76  11.73  11.76   1751800
20 2024-11-19 11:15:00  11.76  11.76  11.72  11.73   2248700
21 2024-11-19 11:20:00  11.73  11.73  11.70  11.71   2464200
22 2024-11-19 11:25:00  11.71  11.71  11.69  11.70   1033600
23 2024-11-19 11:30:00  11.69  11.70  11.67  11.69   2063600

Eu uso df.resample para convertê-los em dados de 30m, o código é:

df = df.set_index('Date')
df = df.resample('30T').agg({'Open':'first', 'High':'max', 'Low':'min','Close':'last',
                                 'Volume':'sum'}, closed='right', label = 'right').dropna()

Mas obtive resultados estranhos como estes:

                      Open   High    Low  Close    Volume
Date                                                     
2024-11-19 09:30:00  11.75  11.87  11.55  11.87  78388400
2024-11-19 10:00:00  11.87  11.96  11.66  11.69  59312000
2024-11-19 10:30:00  11.70  11.74  11.69  11.71  18097400
2024-11-19 11:00:00  11.72  11.76  11.69  11.70  10926300
2024-11-19 11:30:00  11.69  11.70  11.67  11.69   2063600

Aqui estão os dados corretos exportados de 30m do meu software de negociação:

Time    Open    High    Low Close   Volume
 2024/11/19-10:00   11.75   11.96   11.55   11.9    99048200
 2024/11/19-10:30   11.89   11.9    11.66   11.71   43994600
 2024/11/19-11:00   11.72   11.75   11.7    11.74   14492400
 2024/11/19-11:30   11.75   11.76   11.67   11.69   11252500
 

Os dados às 9:30 são irrelevantes, principalmente porque os dados a seguir não estão corretos. mas não encontrei mais parâmetros de df.sample. Como posso agregar os dados corretamente?

pandas
  • 2 2 respostas
  • 29 Views

2 respostas

  • Voted
  1. Best Answer
    mozway
    2024-11-19T20:24:39+08:002024-11-19T20:24:39+08:00

    Por padrão, a referência em resampleé o início do dia . Parece que você quer o início dos dados. Você deve definir origin='start'em vez do padrão origin='start_day':

    (df.resample('30min', origin='start')
       .agg({'Open':'first', 'High':'max', 'Low':'min','Close':'last',
             'Volume':'sum'}, closed='right', label = 'right')
      .dropna()
    )
    

    Saída:

                          Open   High    Low  Close    Volume
    Date                                                     
    2024-11-19 09:35:00  11.75  11.96  11.55  11.90  99048200
    2024-11-19 10:05:00  11.89  11.90  11.66  11.71  43994600
    2024-11-19 10:35:00  11.72  11.75  11.70  11.74  14492400
    2024-11-19 11:05:00  11.75  11.76  11.67  11.69  11252500
    

    E presumivelmente, você deseja passar o labelparâmetro para resample:

    (df.resample('30min', origin='start', label='right')
       .agg({'Open':'first', 'High':'max', 'Low':'min','Close':'last',
             'Volume':'sum'})
     .dropna()
    )
    

    Saída:

                          Open   High    Low  Close    Volume
    Date                                                     
    2024-11-19 10:05:00  11.75  11.96  11.55  11.90  99048200
    2024-11-19 10:35:00  11.89  11.90  11.66  11.71  43994600
    2024-11-19 11:05:00  11.72  11.75  11.70  11.74  14492400
    2024-11-19 11:35:00  11.75  11.76  11.67  11.69  11252500
    

    Por fim, se você quiser arredondar para 30 minutos:

    (df.resample('30min', origin='start', label='right')
       .agg({'Open':'first', 'High':'max', 'Low':'min', 
             'Close':'last', 'Volume':'sum'})
       .dropna()
       .pipe(lambda x: x.set_axis(x.index.floor('30min')))
    )
    

    Saída:

                          Open   High    Low  Close    Volume
    Date                                                     
    2024-11-19 10:00:00  11.75  11.96  11.55  11.90  99048200
    2024-11-19 10:30:00  11.89  11.90  11.66  11.71  43994600
    2024-11-19 11:00:00  11.72  11.75  11.70  11.74  14492400
    2024-11-19 11:30:00  11.75  11.76  11.67  11.69  11252500
    
    • 1
  2. Paras
    2024-11-19T20:27:49+08:002024-11-19T20:27:49+08:00

    Os parâmetros closed='right'e label='right'fazem com que os intervalos se alinhem de forma diferente.

    closed='right': Isso faz com que os intervalos incluam o ponto final direito, mas excluam o esquerdo.

    label='right': Isso rotula os compartimentos resultantes pela borda direita do intervalo.

    df = pd.DataFrame(data)
    df['Date'] = pd.to_datetime(df['Date'])
    df.set_index('Date', inplace=True)
     
    # Resampling
    resampled_df = df.resample('30T', closed='left', label='right').agg({
        'Open': 'first',
        'High': 'max',
        'Low': 'min',
        'Close': 'last',
        'Volume': 'sum'
    }).dropna()
     
    print(resampled_df)
    

    1. Use closed='left'para incluir a borda esquerda de cada intervalo.

    2. Use label='right'para corresponder à rotulagem do seu software de negociação.

    3. Use .agg()para calcular as estatísticas necessárias.

    • 0

relate perguntas

  • Extraia a string da linha duplicada, remova a duplicata, forneça a contagem de strings [duplicada]

  • percorrendo colunas para gerar countplot () seaborn

  • Como posso obter o máximo de cada linha em uma coluna de índice

  • Crie uma matriz dask com pyarrow dtype

  • Divida as entradas no dataframe [duplicado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve