Jupyter/ipywidgets 在两个级别上对数据帧进行排序

Posted

技术标签:

【中文标题】Jupyter/ipywidgets 在两个级别上对数据帧进行排序【英文标题】:Jupyter/ipywidgets sorting dataframe on two levels 【发布时间】:2017-09-13 06:24:33 【问题描述】:

Google 让我失望了,所以希望有人可以帮助我。

我正在使用 Jupyter 笔记本。我有一个数据框,并且正在尝试设置交互式小部件来对该数据框进行排序。

数据框是关于运动员的。我正在尝试按运动员姓名对数据框进行排序,然后按运动员参加的学科对其进行排序。所以,我希望能够选择“Jon”,然后在选择“Jon”之后,我希望能够缩小返回的数据范围,以便我可以查看“乔恩”的三级跳远(并且只有三级跳远)(如果选择),但如果我选择该选项,则可以切换到查看“乔恩”的跳远结果。

data = pd.read_csv("Athlete Rank Moments.csv", encoding = "latin-1", usecols = [0, 1, 2, 4, 5, 16], 
               parse_dates = True, infer_datetime_format = True)
data["RankDate"] = pd.to_datetime(data["RankDate"], errors="coerce")

items = ['All']+sorted(data["Person/Team"].unique().tolist())
discipline_items = ['All']+sorted(data["Discipline"].unique().tolist())


def view(x='', y=''):
    if x == 'All': return data
    return data[data['Person/Team','Discipline']==x]


w = widgets.Select(options=items)
z = widgets.Select(options = discipline_items)
v = interact(view, x=w, y=z)
display(v)

这段代码给了我两个下拉菜单,但是“discipline_list”的下拉菜单根本不会改变返回的数据。很明显,这是因为视图函数没有对它做任何事情,但我不知道在视图函数中写什么才能得到我想要的结果。任何帮助将不胜感激!

【问题讨论】:

您能提供一个虚拟版本的 DataFrame 吗?谢谢。 【参考方案1】:

您可以做到这一点的一种方法是将您的view 函数分解为两个单独的函数。第一个根据“Person/Team”过滤DataFrame并返回结果。第二个函数调用第一个获取结果,然后根据“纪律”过滤并显示 DataFrame。然后你在第二个函数上调用交互。像这样;

def view_1(x=""):
    if x == 'All':
        return data
    else:
        return data[data['Person/Team']==x]

def view_2(x="", y=""):
    data_2 = view_1(x)
    if y == 'All':
        display(data_2)
    else:
        display(data_2[data_2["Discipline"]==y])

w = widgets.Select(options=items)
z = widgets.Select(options=discipline_items)
v = interact(view_2, x=w, y=z)
display(v)

我已经在 DataFrames 上测试了类似的函数,我正在处理这些函数并获得了积极的结果,但我不能保证这对你有用,因为你的问题缺少示例 DataFrame。无论如何希望对您有所帮助!

【讨论】:

以上是关于Jupyter/ipywidgets 在两个级别上对数据帧进行排序的主要内容,如果未能解决你的问题,请参考以下文章

本地存储如何在域级别上工作?两个站点使用相同的密钥来存储数据? [复制]

在 pandas 多索引数据帧上绘制两个级别的 x_ticklabels [重复]

如何在行级别上比较两个海量 Spark 数据帧并打印差异

R shiny 中的级别替换创建两个级别列表,一个为 NULL

如何定位多个 API 级别?

熊猫数据框:在进行涉及两个数据框的算术运算时如何在多个索引级别上进行匹配