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

Python Discussion :

Tirage aléatoire avec nombre d'occurrence défini


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Pilote production
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Pilote production

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Par défaut Tirage aléatoire avec nombre d'occurrence défini
    Bonjour,

    Je ne suis pas sûr que le titre soit très clair.
    Je suis sous databricks et je cherche à créer un tirage aléatoire à partir de 2 dataframe.
    Le premier (df_1) contient 2 colonnes : "contenant", "volume" et le deuxième (df_2) une colonne : "identifiant"
    La colonne contenant contient un nombre de variables non fixe. Le volume est un entier.
    L'identifiant un numéro.
    Nom : 2023-10-19 17_08_13-Classeur1 - Excel.png
Affichages : 221
Taille : 1,9 Ko
    Je souhaite ajouter une colonne à df_2 pour que chaque valeur de "contenant" apparaisse x fois (sachant x est la valeur de "volume" correspondant dans df_1).

    Lorsque le tirage est fixe (même volume pour tout le monde), je m'en suis bien tiré en créant une liste de répétition de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mavar_repeated = []
    for valeur in mavar:
        mavar_repeated.extend([valeur] * nombre_de_valeurs)

    Mais je n'arrive pas à aller plus loin.
    J'ai bien essayé de travailler sur des dictionnaires ou avec une udf utilisant array, mais c'est très au dessus de mes compétences...
    Je vous remercie pour votre aide.

    Petite précision : dans df_2 : chaque identifiant est unique et le nombre d'identifiant correspond à la somme des volumes.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 823
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Rehoc59 Voir le message
    Je ne suis pas sûr que le titre soit très clair.
    Ni le texte...
    Citation Envoyé par Rehoc59 Voir le message
    Je souhaite ajouter une colonne à df_2 pour que chaque valeur de "contenant" apparaisse x fois (sachant x est la valeur de "volume" correspondant dans df_1).
    Donc (exemple) pour la première ligne, avec "contenant" égal à "cont1" et "volume" valant 406 tu veux 406 fois "cont1" ??? df_2=contenant * volume.
    Il est où l'aléatoire là dedans ?

    Citation Envoyé par Rehoc59 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mavar_repeated = []
    for valeur in mavar:
        mavar_repeated.extend([valeur] * nombre_de_valeurs)
    mavar_repeated=[valeur,] * nombre_de_valeurs...

    Citation Envoyé par Rehoc59 Voir le message
    Mais je n'arrive pas à aller plus loin.
    Tu arrives à récupérer "valeur" (je présume que c'est la colonne "contenant") pour une ligne "l" tu ne peux pas récupérer la colonne "volume" de la même ligne ? Parce qu'en réalité tout est là...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Pilote production
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Pilote production

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Effectivement, je ne suis pas très clair.

    Le côté aléatoire est géré sur le df_2 en amont en amont en fait.

    J'arrive à définir nombre_de_valeurs en prenant la longueur de df_2, divisée par le nombre de contenants.
    Si j'ai df_2 de longueur 600 et 3 contenants, j'aurais nombre_de_valeurs = len(df_2)/3 et ainsi chaque contenant apparaîtra 200 fois.

    Ce que je n'arrive pas à faire c'est définir nombre_de_valeurs pour que chaque contenant apparaisse en fonction du volume. de df_1.
    Donc oui, sur mon exemple cont1 doit apparaitre 406 fois, cont2 0, etc...

    Pour info, je n'ai pas accès à la fonction RDD sur le cluster qui m'est attribué.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 707
    Par défaut
    Citation Envoyé par Rehoc59 Voir le message
    Effectivement, je ne suis pas très clair
    Pour demander de l'aide, il faut un minimum de bagage technique pour exprimer correctement ce qu'on veut. A défaut, on peut juste poster l'énoncé du problème et le code qu'on a essayé.

    Prenez un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> L = ('a', 4), ('b', 0), ('c', 2)
    note: et c'est un tableau car il a deux dimensions.
    Si on veut fabriquer un 2ème tableau tel que décrit, on commence par fabriquer le résultat attendu à partir de L.
    Ce qui en Python de base donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> index = 0
    >>> R = []
    >>> for s, c in L:
    ...     for j in range(c):
    ...         R.append((index, s))
    ...         index += 1
    ...
    >>> R
    [(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a'), (4, 'c'), (5, 'c')]
    Après on peut s'amuser à faire des variations, genre fabriquer R avec ses index avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> v = sum(x[1] for x in L)
    >>> v
    6
    >>> R = [(u,) for u in range(v)]
    >>> R
    [(0,), (1,), (2,), (3,), (4,), (5,)]
    Et la jonglerie sera similaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> index = 0
    >>> for s, c in L:
    ...     for j in range(c):
    ...         R[index] = (R[index][0], s)
    ...         index += 1
    ...
    >>> R
    [(0, 'a'), (1, 'a'), (2, 'a'), (3, 'a'), (4, 'c'), (5, 'c')]
    >>>
    Remplacer les structures de base du langage (liste, tuple,...) par des entités plus abstraites telles que des dataframes qui sortent de pandas ou de databricks ne change pas grand chose à ce qui devra être fait: ça ajoute une couche qui devrait nous éviter d'avoir à écrire nombre de ligne de code.

    Ici, cette couche ne semble pas apporter grand chose sinon de vous forcer à manipuler les concepts qui vous avec mais si vous n'avez pas pris le temps d'apprendre les bases du langage (pour faire sans cette couche) ben vous êtes coincé tant pour faire par vous même que pour demander de l'aide (ou chercher sur Internet).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Tirage aléatoire avec condition
    Par maxbfox dans le forum Excel
    Réponses: 6
    Dernier message: 08/09/2013, 16h00
  2. [2005] tirage aléatoire avec NEWID()
    Par Kropernic dans le forum Développement
    Réponses: 5
    Dernier message: 04/06/2012, 09h47
  3. [XL-2003] Problème de tirage aléatoire avec mon programme
    Par MARGAR dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 15/11/2011, 15h19
  4. Tirage aléatoire avec remise
    Par ndiayette dans le forum SAS STAT
    Réponses: 3
    Dernier message: 16/05/2008, 22h14

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