Как объединить динамические кадры данных - PullRequest
0 голосов
/ 27 сентября 2019

Я ищу помощи, чтобы добавить два динамически сгенерированных кадра данных.Оба DataFrames имеют столбец, рассчитанный на входе от ipywidget intslider.третий Dataframe должен обновляться динамически при изменении любого из указанных выше Dataframes

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 и два являются локальными и, следовательно, приводят к:

NameError: имя 'df_one' не определено

, но я не знаю, как сделать их доступными.Любой указатель будет оценен

1 Ответ

0 голосов
/ 27 сентября 2019

Ваши функции могут возвращать два кадра данных, добавляя оператор 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_one и df_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

...