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

Pandas Jupyter/ipywidgets在两个级别上对数据帧进行排序,pandas,ipython,jupyter-notebook,jupyter,ipywidgets,Pandas,Ipython,Jupyter Notebook,Jupyter,Ipywidgets,谷歌让我失望了,所以希望有人能帮助我 我在用一本Jupyter笔记本。我有一个数据框,正在尝试设置交互式小部件来对该数据框进行排序 数据框是关于运动员的。我试图按运动员姓名对数据框进行排序,然后按运动员参加比赛的学科对其进行排序。因此,我希望能够选择“Jon”,然后在选择“Jon”之后,我希望能够缩小返回的数据范围,以便我可以查看“Jon”三级跳远(只有三级跳远),如果选择了,但如果我选择了“Jon”跳远,则能够切换到“Jon”跳远结果 data = pd.read_csv("Athlete R

谷歌让我失望了,所以希望有人能帮助我

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

数据框是关于运动员的。我试图按运动员姓名对数据框进行排序,然后按运动员参加比赛的学科对其进行排序。因此,我希望能够选择“Jon”,然后在选择“Jon”之后,我希望能够缩小返回的数据范围,以便我可以查看“Jon”三级跳远(只有三级跳远),如果选择了,但如果我选择了“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)

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

一种方法是将
视图
函数拆分为两个单独的函数。第一个根据“个人/团队”过滤数据帧并返回结果。第二个函数调用第一个函数,获取结果,然后根据“规程”过滤和显示数据帧。然后在第二个函数中调用interact。就这样,

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)

我已经在我正在处理的数据帧上测试了类似的函数,结果是肯定的,但我不能保证这对您有效,因为您的问题缺少示例数据帧。无论如何,希望这有帮助

一种方法是将
视图
函数拆分为两个单独的函数。第一个根据“个人/团队”过滤数据帧并返回结果。第二个函数调用第一个函数,获取结果,然后根据“规程”过滤和显示数据帧。然后在第二个函数中调用interact。就这样,

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)

我已经在我正在处理的数据帧上测试了类似的函数,结果是肯定的,但我不能保证这对您有效,因为您的问题缺少示例数据帧。无论如何,希望这有帮助

您能提供数据帧的虚拟版本吗?谢谢。你能提供数据帧的虚拟版本吗?谢谢