问题描述
Python的新手,正在寻求构建函数的帮助-我搜索了其他答案,但没有找到我想要的东西(如果是重复查询,请根据需要重定向)。
我正在与Pandas合作,下面有一个Dataframe,其中包含两列排名:
我有此数据框的3个副本,它们的格式相同,但值不同。每个列包含两个排名列(col1中的rank_ctb和col2中的rank_score)。
我想构建一个函数,在该函数中我可以传递数据框的名称,并将第1列中排名最高的5个ID(索引列)添加到列表中,并向列表中添加5个最高ID排在第2列的排名中。
因此在此数据示例中,col 1已经在排名上进行了排序,列表将包含以下值:
RANK_CTB的#5最高排名
List_One = [Test_Data_1,Test_Data_9,Test_Data_19,Test_Data_5,Test_Data_8]
RANK_score中排名第5的最高排名(此列未排序,在我的示例数据中第3和第5排名不可见)
List_Two = [Test_Data_8,Test_Data_22, someotherotherID ,Test_Data_26, some_other_ID2 ]
我最初的想法是我需要使用一个for循环并设置两个空列表,但是从那以后我完全陷入了困境。
解决方法
我正在为您编写一个测试功能,我认为这可以完成工作。 根据需要对其进行一些修改
def test(df):
list_one = []
list_two = []
col1_highest = sorted(list(df.RANK_CTB),reverse = True)[:5]
col2_highest = sorted(list(df.RANK_SCORE),reverse = True)[:5]
for i range(len(col1_highest)):
list_one.append(df.loc[df.RANK_CTB == col1_highest[i],'ID'])
list_two.append(df.loc[df.RANK_SCORE == col2_highest[i],'ID'])
return list_one,list_two
list_one,list_two = test(name_of_df)