如何合并动态数据框

时间:2019-09-27 07:32:29

标签: python pandas jupyter-notebook ipywidgets

我正在寻找添加两个动态生成的数据框的帮助。 这两个DataFrame都有一个根据内置ipywidget的输入计算的列。 第三个数据框应根据上述任何一个数据框的变化动态更新

import pandas as pd
from ipywidgets import interact
@interact(x=(0,1000,10))
def df_draw_one(x):
    data = {"A":[1,2,3,4,5]}
    df_one = pd.DataFrame(data)
    df_one['B'] = df_one['A']*x
    print(df_one)
@interact(x=(0,1000,10))
def df_draw_two(x):
    data = {"A":[6,7,8,9,10]}
    df_two = pd.DataFrame(data)
    df_two['B'] = df_two['A']*x
    print(df_two)
df_res = df_one+df_two

我了解当前的代码,df_one和2是本地的,因此导致:

  

NameError:名称'df_one'未定义

但是我对如何使它们可访问性一无所知。 任何指针将不胜感激

1 个答案:

答案 0 :(得分:0)

您可以让您的函数返回两个数据帧,并添加一个return语句。

import pandas as pd
from ipywidgets import interact


@interact(x=(0, 1000, 10))
def df_draw_one(x):
    data = {"A": [1, 2, 3, 4, 5]}
    df_one = pd.DataFrame(data)
    df_one['B'] = df_one['A'] * x
    print(df_one)
    return df_one


@interact(x=(0, 1000, 10))
def df_draw_two(x):
    data = {"A": [6, 7, 8, 9, 10]}
    df_two = pd.DataFrame(data)
    df_two['B'] = df_two['A'] * x
    print(df_two)
    return df_two


df_one = df_draw_one(1)
df_two = df_draw_two(1)

df_res = df_one + df_two
print(df_res)

另一种方法是将df_onedf_two用作全局变量,但这很脏,并不是真正的必要。

更新 一个想法可能是使两个小部件都在同一函数中生成,然后一切都变得更易于处理。

import pandas as pd
from ipywidgets import interact


@interact()
def df_draw_one(x=(0, 1000, 10), y=(0, 1000, 10)):

    data = {"A": [1, 2, 3, 4, 5]}
    df_one = pd.DataFrame(data)
    df_one['B'] = df_one['A'] * x

    data2 = {"A": [6, 7, 8, 9, 10]}
    df_two = pd.DataFrame(data2)
    df_two['B'] = df_two['A'] * y

    display(df_one)
    display(df_two)
    df_res = df_one + df_two
    display(df_res)

这是我的结果:

Here my result