IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Pandas / Ajouter des colonnes avec indicateurs sur plusieurs ID sur séries temporelles


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2019
    Messages : 12
    Par défaut Pandas / Ajouter des colonnes avec indicateurs sur plusieurs ID sur séries temporelles
    Bonjour,

    A partir de cette table qui comprend une valeur, une date et l'identifiant pour 2000 individus je souhaite calculer des ratios propre à chaque individus.

    Nom : 1.PNG
Affichages : 149
Taille : 25,0 Ko

    J'ai pensé a procéder de cette manière mais ca ne semble pas bon. Pandas ne me sort pas le calcul de la volatilité. Et je ne pense pas que itérer un df pour chaque ID soit la meilleure solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    data = dict()
     
    for unique in MV['ID_Perf'].unique():
        data[unique] = MV.loc[MV['ID_Perf']==unique]
        data[unique]['Perf'] = data[unique]['VL']/data[unique]['VL'].shift(1) -1
        data[unique]['Volat'] = (np.std(data[unique]['Perf'])*252**0.5)
    Nom : 2.png
Affichages : 143
Taille : 16,4 Ko

    Cette méthode non plus ne donne rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def std(grp):
        grp  = grp / (grp.shift() - 1) 
        return grp.std() * 252**0.5
     
    std = (MV.groupby('ID_Perf')['VL'].apply(std)
                                .rename('Volat')
          )
     
    df = MV.join(std, on='ID_Perf')
     
    check = df.loc[df.loc[:,'ID_Perf']=='0P00000ARS']
     
    check
    Nom : 3.PNG
Affichages : 189
Taille : 39,6 Ko

    De quelle manière je dois m'y prendre pour calculer des ratios par ID en série temporelle ? Merci

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Ce problème est sans doute réglé depuis lors, mais je propose quand même une solution. Pas très élégante, et sans doute très lente dès lors qu'il s'agit de traiter un grand nombre de données. Cela dit, mieux vaut une solution peu efficace que pas de solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import numpy as np
    import pandas as pd
     
     
    data = {
        'Date_VL': ['2016-05-31', '2016-05-31', '2016-05-31', '2016-06-01', '2016-06-01', '2016-06-02', '2016-06-02', '2016-06-03'], 
        'ID_Perf': ['1', '2', '3', '1', '2', '1', '2', '1'],
        'VL': [100, 100, 100, 104, 99, 105, 100, 106],
    }
     
    df = pd.DataFrame(data)
    print(df)
     
    for id_perf in set(df['ID_Perf'].values):
        # Subset
        _df = df[df['ID_Perf'] == id_perf]
        # Annual volatility and returns
        _df['Perf'] = _df['VL'] / _df['VL'].shift(1) - 1
        _df['Volat'] = np.sqrt(np.std(_df['Perf'])*252)
     
        print(id_perf)
        print(_df)
    Pour chaque identifiant unique (d'où mon emploi de set()), je filtre le dataframe puis calcule les deux grandeurs souhaitées.

    ça fait le job.

    J

Discussions similaires

  1. Ajouter des colonnes avec composant script
    Par clouddd dans le forum SSIS
    Réponses: 4
    Dernier message: 10/08/2016, 11h38
  2. [XL-2003] transfert de plusieurs lignes en une seule avec ajout des colonnes
    Par ghatfan99 dans le forum Excel
    Réponses: 0
    Dernier message: 10/08/2011, 20h33
  3. Réponses: 3
    Dernier message: 06/06/2011, 12h56
  4. Réponses: 5
    Dernier message: 27/04/2007, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo