Python 如何处理2个小部件事件来控制数据帧?
我试图使用2个IPyWidget来控制数据帧,并作为对2个IPyWidget的更改进行刷新 创建一个新列(Check_value),按小部件a中的值向下移动Values列 过滤并仅显示Check_值大于小部件B中值的值列的行 数据帧: 日期|值 第1天| 5 第2天| 9 第3天| 14 第4天| 40 第5天| 80Python 如何处理2个小部件事件来控制数据帧?,python,pandas,ipywidgets,Python,Pandas,Ipywidgets,我试图使用2个IPyWidget来控制数据帧,并作为对2个IPyWidget的更改进行刷新 创建一个新列(Check_value),按小部件a中的值向下移动Values列 过滤并仅显示Check_值大于小部件B中值的值列的行 数据帧: 日期|值 第1天| 5 第2天| 9 第3天| 14 第4天| 40 第5天| 80 ## Widget A A = widgets.IntSlider( value=1, min=1, max=30, step=1) ## Widget B B = wid
## Widget A
A = widgets.IntSlider(
value=1,
min=1,
max=30,
step=1)
## Widget B
B = widgets.IntSlider(
value=1,
min=1,
max=30,
step=1)
out = widgets.Output()
## Processing
def common_processing(period, filters):
out.clear_output()
with out:
df = pd.read_csv(data.csv)
df['Dates'] = pd.to_datetime(df['Dates'])
df['check_value'] = df['Value'].shift(-period)
df['delta'] = df['check_value'] - df['Value']
display(df[df['delta'] > filters])
def A_eventhandler(change):
common_processing(change.new, B.value)
def B_eventhandler(change):
common_processing(A.value, change.new)
A.observe(A_eventhandler, names='value')
B.observe(B_eventhandler, names='value')
display(A)
display(B)
显示的数据框不会随着小部件值的更改而更改。我尝试运行您的代码,更改小部件值时不会调用A\u eventhandler函数(您可以通过在调用
公共处理之前运行print(change)
来检查这一点。)
原因是您的名称
关键字必须是列表,而不是字符串。因此,请尝试:
A.observe(A_eventhandler,name=['value'])
B.observe(B_eventhandler,name=['value']))
当我在一个小部件上设置一个observed
时,我总是先不进行任何过滤,只在observed函数中打印结果。然后,您可以添加关键字以筛选出所需的事件和值
另外,当您在这里捕获输出时,不要忘记在代码中的某个地方显示(out)
。否则你什么也看不见 我尝试运行您的代码,当您更改小部件值时,不会调用A\u eventhandler函数(您可以在公共处理调用之前运行打印(更改)
来检查这一点。)
原因是您的名称
关键字必须是列表,而不是字符串。因此,请尝试:
A.observe(A_eventhandler,name=['value'])
B.observe(B_eventhandler,name=['value']))
当我在一个小部件上设置一个observed
时,我总是先不进行任何过滤,只在observed函数中打印结果。然后,您可以添加关键字以筛选出所需的事件和值
另外,当您在这里捕获输出时,不要忘记在代码中的某个地方显示(out)
。否则你什么也看不见