根据列中的唯一值创建一个下拉列表,并将所选值分配给变量
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_1
、code_2
、code_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()
我有一个巨大的数据框:
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_1
、code_2
、code_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()