df = pd.DataFrame([["Alpha", 3, 2, 4], ["Bravo", 2, 3, 1], ["Charlie", 4, 1, 3], ["Delta", 1, 4, 2]],
columns = ["Company", "Running", "Combat", "Range"])
print(df)
Company Running Combat Range
0 Alpha 3 2 4
1 Bravo 2 3 1
2 Charlie 4 1 3
3 Delta 1 4 2
[嗨,我正在尝试对以下数据框进行排序,以便对行进行排列,从而使三列中表现最佳的行位于顶部。在这种情况下将是Bravo公司,因为它在运行中为2,演习为3,范围为1。
如果列表中有更多公司,并且很难知道确切的“最佳公司”,这种方法是否行得通?
我尝试过:
df_sort = df.sort_values(['Running', 'Combat', 'Range'], ascending=[True, True, True])
当前输出:
Company Running Combat Range
1 Delta 1 4 2
0 Bravo 2 3 1
3 Alpha 3 2 4
2 Charlie 4 1 3
但事实并非如此。可以通过熊猫吗?我期望的输出是:
Company Running Combat Range
0 Bravo 2 3 1
1 Delta 1 4 2
2 Charlie 4 1 3
3 Alpha 3 2 4
如果要按每行mean
进行排序,请先创建mean
,然后将Series.argsort
添加到排序值的位置,最后按Series.argsort
更改值的顺序:
DataFrame.iloc
编辑:如果需要在DataFrame.iloc
之前删除一些列:
df1 = df.iloc[df.mean(axis=1).argsort()]
print (df1)
Company Running Combat Range
1 Bravo 2 3 1
3 Delta 1 4 2
2 Charlie 4 1 3
0 Alpha 3 2 4