1

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

我正在使用 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”的下拉菜单根本不会改变返回的数据。很明显,这是因为视图函数没有对它做任何事情,但我不知道在视图函数中写什么才能得到我想要的结果。任何帮助,将不胜感激!

4

1 回答 1

0

您可以做到这一点的一种方法是将您的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。无论如何希望这会有所帮助!

于 2017-05-08T17:44:52.493 回答