我是新来的,不知道我在做什么。我搜索了Stack Overflow,却找不到我做错了什么。
我要做的是根据一列中的值对数据框进行排序,然后创建一个新列,然后根据排序后的列表分配一个等级(在这种情况下为1到4)。然后根据新列中的值再次进行操作。
例如: dfteams = dfteams.sort_values([[Wins'],ascending = [False]) dfteams ['Win_rnk'] = range(1,len(dfteams)+ 1)
在我的数据框中(分配了名称“ dfteams”),我已按“胜数”列对整个DF进行了排序。然后,我创建了一个名为“ Win_rnk”的新列,并为每行分配了1到4的排名(因为这是我数据框中有多少行)。
那行得通。而且,如果我根据新的统计数据再次执行此操作,那么它也可以正常运行。
但是,如果我使用相同的代码并将其放入函数中,则所有新列最终都具有相同的值(根据我排序的最后一列进行排名)。而且我不知道为什么它直接作为脚本的一部分,而不是通过函数执行时。
标题=团队,胜利,失败,积分
1、7、1、560队
第2、6、2、595队
3、5、3、403队
4、4、4、460队
我想添加Win_rnk列(带有上面的示例代码): 标头=团队,胜利,失败,积分,Win_rnk
1、7、1、560、1队
Team2,6,2,595,2
3、5、3、403、3队
4、4、4、460、4队
然后,我想添加Points_rnk列(与示例相同的代码,但调用dfteams ['Points']进行排序:
标题=团队,获胜,亏损,积分,Win_rnk,Points_rnk
第2、6、2、595、2、1队
1、7、1、560、1、2队
4、4、4、460、4、3队
第3、5、3、403、3、4队
在我的脚本中,这可行。我想将代码移到一个函数上,但是当我这样做时,我最终使两个新列都具有相同的值。
defrank_stats(dfteams): dfteams = dfteams.sort_values([[Wins'],ascending = [False]) dfteams ['Win_rnk'] = range(1,len(dfteams)+ 1)
dfteams = dfteams.sort_values(['Points'], ascending=[False])
dfteams['Points_rnk'] = range(1, len(dfteams) + 1)
当我调用函数而不是直接在脚本中运行它时,它会给我以下信息:
标题=团队,获胜,亏损,积分,Win_rnk,Points_rnk
2、6、2、595、1、1队
团队1、7、1、560、2、2
4、4、4、460、3、3队
第3、5、3、403、4、4队
请注意,现在返回的Win_rnk列的值与Points_rnk相同。这不是我想做的。
由于我是编程的新手,可能有些基本的知识我不了解,但是在寻找答案并找不到答案后,我希望有人可以告诉我这是什么。我做错了。
答案 0 :(得分:0)
实现这样的功能
def ranking_stats(dfteams):
dfteams = dfteams.sort_values(['Wins'], ascending=[False])
dfteams['Win_rnk'] = range(1, len(dfteams) + 1)
dfteams = dfteams.sort_values(['Points'], ascending=[False])
dfteams['Points_rnk'] = range(1, len(dfteams) + 1)
return dfteams
输入数据框-> dfteams
Team Wins Losses Points
0 Team1 7 1 560
1 Team2 6 2 595
2 Team3 5 3 403
3 Team4 4 4 460
现在,像这样呼叫ranking_stats()
dfteams = ranking_stats(dfteams)
dfteams
输出:
Team Wins Losses Points Win_rnk Points_rnk
1 Team2 6 2 595 2 1
0 Team1 7 1 560 1 2
3 Team4 4 4 460 4 3
2 Team3 5 3 403 3 4