Séparer une dataframe en trois plages de dates disjointes

Résolu

Bonjour,

Je débute sur Python et je n'arrive pas à savoir quel code écrire pour répondre à cette question : 

Créer une nouvelle variable nommée duration_categ contenant 3 modalités :

  • court-terme pour tous les prêts d'une durée inférieure ou égale à 10 mois ;
  • moyen-terme pour tous les prêts d'une durée strictement supérieure à 10 mois et inférieure ou égale à 30 mois ;
  • long-terme pour tous les prêts d'une durée strictement supérieure à 30 mois.

La dataframe se nomme df dont voici un extrait : (impossible de mettre l'extrait en image meme en tableau)

Donc il faut définir se code par rapport à la colonne 'duration' (du prêt).

Je vous remercie par avance de votre aide.

2 réponses

  1. Bonjour,

    Tu veux créer une nouvelle colonne dans ton DataFrame df en fonction de la colonne duration.

    En Python avec pandas, tu peux le faire de plusieurs façons :

    Avec pd.cut (très pratique pour des intervalles numériques)

    import pandas as pd
    
    df["duration_categ"] = pd.cut(
        df["duration"],
        bins=[-float("inf"), 10, 30, float("inf")],  # bornes des intervalles
        labels=["court-terme", "moyen-terme", "long-terme"]
    )
    

    Ici :

    (-∞, 10] → court-terme

    (10, 30] → moyen-terme

    (30, ∞) → long-terme

    Avec np.where (rapide et lisible si peu de conditions)

    import numpy as np
    
    df["duration_categ"] = np.where(df["duration"] <= 10, "court-terme",
                            np.where(df["duration"] <= 30, "moyen-terme",
                                     "long-terme"))
    

    Avec une fonction et .apply (plus pédagogique au début)

    def categoriser_duree(x):
        if x <= 10:
            return "court-terme"
        elif x <= 30:
            return "moyen-terme"
        else:
            return "long-terme"
    
    df["duration_categ"] = df["duration"].apply(categoriser_duree)
    

    Si tu débutes, je te conseille la méthode 3 (avec fonction) pour bien comprendre la logique.
    Ensuite tu pourras passer à la méthode 1 (avec pd.cut) qui est la plus concise et "pro".

    Je t'ai écris un exemple complet avec un petit DataFrame fictif pour que tu puisses tester directement dans ton Python :

    import pandas as pd
    
    # Exemple de DataFrame avec une colonne "duration"
    data = {
        "id": [1, 2, 3, 4, 5],
        "duration": [5, 12, 30, 45, 8]   # durées en mois
    }
    
    df = pd.DataFrame(data)
    
    print("=== DataFrame de départ ===")
    print(df)
    
    # --- Méthode avec une fonction + apply (simple à comprendre) ---
    def categoriser_duree(x):
        if x <= 10:
            return "court-terme"
        elif x <= 30:
            return "moyen-terme"
        else:
            return "long-terme"
    
    df["duration_categ"] = df["duration"].apply(categoriser_duree)
    
    print("\n=== DataFrame avec duration_categ ===")
    print(df)
    

    Résultat attendu :

    === DataFrame de départ ===
       id  duration
    0   1         5
    1   2        12
    2   3        30
    3   4        45
    4   5         8
    
    === DataFrame avec duration_categ ===
       id  duration  duration_categ
    0   1         5     court-terme
    1   2        12    moyen-terme
    2   3        30    moyen-terme
    3   4        45     long-terme
    4   5         8     court-terme
    

    4
    1. Bonjour, je vous remercie pour votre explication qui est très claire merci beaucoup.

      J'ai continué à chercher aussi et j'ai finalement réussi avec lambda : 

      df['duration_categ'] = df['Duration'].apply(lambda x: "Moyen-terme" if 10 < x <= 30 else ("court-terme" if x <= 10 else "long-terme"))

      Je garde votre explication car vraiment limpide merci encore

      3