【问题标题】:How to merge Dynamic Dataframes如何合并动态数据框
【发布时间】:2020-01-27 12:06:05
【问题描述】:

我正在寻求帮助以添加两个动态生成的数据框。 两个 DataFrame 都有一个根据 intslider 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 和两个是本地的,因此导致:

NameError:名称“df_one”未定义

但我不知道如何使它们易于访问。 任何指针将不胜感激

【问题讨论】:

  • 返回 df_onedf_two 不打印。

标签: python pandas jupyter-notebook ipywidgets


【解决方案1】:

您可以让您的函数返回添加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)

这是我的结果:

【讨论】:

  • 我曾经有过那个。问题是两个数据帧 df_res 中的 x 都设置为 x。
  • (附加到上一条评论)` A B 0 7 7 1 9 9 2 11 11 3 13 13 4 15 15 `
  • 明白了,你希望两个 df 都由同一个滑块控制?
  • 好问题。不。我希望两个 df 都可以独立调整,并且 df_res 应该动态更新 df_one 或 df_two 的任何个别变化
  • 我认为如果你把两者放在同一个函数中,一切都会变得更容易:)
猜你喜欢
  • 2021-07-30
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多