根据列中的唯一值创建一个下拉列表,并将所选值分配给变量

Create a drop-down list based on the unique values in the column and assign the selected value to the 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
...

在原始数据框中,有几列和大量行。

我需要在 code_1code_2code_3 列中找到唯一值,然后创建一个下拉列表并将所选值分配给特定变量。我需要分别为每一列执行此操作。

例如,我在一列 code_1 中找到所有唯一值,用户从下拉列表中选择所需的值(例如 065.0055)并将此值分配给变量(vl = '065.0055').

我需要将选择的值分配给变量,以便我可以继续根据它们进行计算。

我找到了如何创建下拉列表,但我不知道如何分配所选值(如 vl 的示例)

这是我的代码:

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)

因此,我需要获取三个变量,例如: 如果用户做出以下选择:从 code_1 中选择了 065.0055,从 code_2 中选择了 3315,从 code_3 中选择了 S-E

我需要获取三个变量

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

我需要建议,拜托!

UPD 研究了几个问题后,我决定尝试使用 Tkinter 这是我的代码:

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()

如何将选择的结果保存到变量中?

OptionMenu 的当前选择存储在其 StringVar 中。您可以使用 StringVar 的 .get() 方法获取它:

selection1 = mymenu1.var.get()

如果您想保存所有当前选择,例如当用户按下按钮时,您可以在 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()