2017-07-27 7 views
0

J'ai une énorme dataframe:Créer une liste déroulante sur la base des valeurs uniques dans la colonne et attribuer la valeur sélectionnée à la variable

   df 
code_1  code_2 code_3 
065.0055  3315  N-W 
067.3355  4511  S-E 
065.0055  3315  N-W 
034.0035  4511  N-W 
067.3355  1311  S-E 
... 

Dans le dataframe d'origine, il y a plusieurs colonnes et un grand Nombre de rangées.

J'ai besoin de trouver des valeurs uniques dans les colonnes code_1, code_2, code_3, puis de créer une liste déroulante et d'affecter la valeur sélectionnée à une variable spécifique. Et je dois le faire pour chaque colonne séparément.

Par exemple, je trouve toutes les valeurs uniques dans une colonne code_1, l'utilisateur sélectionne la valeur dans la liste déroulante (par exemple 065.0055) et cette valeur est affectée à la variable (vl = '065.0055').

Je dois assigner les valeurs choisies à la variable, de sorte que je puisse continuer à faire des calculs basés sur eux.

J'ai trouvé comment créer une liste déroulante, mais je ne sais pas comment affecter la valeur sélectionnée (comme dans l'exemple avec vl)

Voici mon code:

import ipywidgets as widgets 
from IPython.display import display 
from IPython.html.widgets import interactive 

items = ['-']+sorted(df['code_1'].unique().tolist()) 

def view(x=''): 
    if x=='-': 
     return df 
    return df[df['code_1']==x] 

w = widgets.Select(options=items) 
interactive(view, x=w) 

Comme en conséquence, je dois obtenir trois variables, par exemple: Si l'utilisateur fait le choix suivant: de code_1 a été choisi 065.0055, de code_2 a été choisi 3315, de code_3 a été choisi S-E.

J'ai besoin de trois variables

vl1 = '065.0055' 
vl2 = '3315' 
vl3 = 'S-E' 

je besoin de conseils, s'il vous plaît!

UPD Après avoir étudié quelques questions, j'ai décidé d'essayer d'utiliser Tkinter Voici mon code:

items = ['-']+sorted(df['code_1'].unique().tolist()) 
items1 = ['-']+sorted(df['code_2'].unique().tolist()) 
items2 = ['-']+sorted(df['code_3'].unique().tolist()) 

from tkinter import* 

class MyOptionMenu(OptionMenu): 
    def __init__(self, master, status, *options): 
     self.var = StringVar(master) 
     self.var.set(status) 
     OptionMenu.__init__(self, master, self.var, *options) 
     self.config(font=('calibri',(10)),bg='white',width=12) 
     self['menu'].config(font=('calibri',(10)),bg='white') 

root = Tk() 
optionList = items 
optionList1 = items1 
optionList2 = items2 
mymenu1 = MyOptionMenu(root, 'Select code_1', *optionList) 
mymenu2 = MyOptionMenu(root, 'Select code_2', *optionList1) 
mymenu3 = MyOptionMenu(root, 'Select code_3', *optionList2) 
mymenu1.pack() 
mymenu2.pack() 
mymenu3.pack() 
root.mainloop() 

Comment puis-je enregistrer le résultat de la sélection à une variable?

Répondre

1

La sélection actuelle d'un OptionMenu est stocké dans son StringVar. Vous pouvez l'obtenir en utilisant la méthode de LaChaine .get():

selection1 = mymenu1.var.get() 

Si vous souhaitez enregistrer toutes les sélections actuelles par exemple lorsque l'utilisateur appuie sur un bouton, vous pouvez ajouter ce qui suit avant root.mainloop():

def save_selected_values(): 
    global values 
    values = [mymenu1.var.get(), mymenu2.var.get(), mymenu3.var.get()] 
    print(values) 

button = Button(root, text="OK", command=save_selected_values) 
button.pack()