Python 如何处理2个小部件事件来控制数据帧?

Python 如何处理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

我试图使用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 = 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)
。否则你什么也看不见