跨多个列排序

2024-03-28 13:44:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

您好,我正在尝试对下面的数据帧进行排序,以便对行进行排列,从而使三列中性能最好的列位于顶部。在这种情况下,将是布拉沃公司,因为它有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

Tags: columnsalphatruedataframedf公司rangesort
1条回答
网友
1楼 · 发布于 2024-03-28 13:44:18

如果要按每行mean排序,请首先创建mean,然后为排序值的位置添加^{},并按^{}最后更改值顺序:

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

编辑:如果需要删除^{}之前的某些列:

cols = ['Overall','Subordination']
df2 = text_df.iloc[text_df.drop(cols, axis=1).mean(axis=1).argsort()]
print (df2)
   Company  Running  Combat  Overall Subordination  Range
1    Bravo        2       3     0.70          Poor      1
3    Delta        1       4     0.83          Good      2
2  Charlie        4       1     0.81          Good      3
0    Alpha        3       2     0.91     Excellent      4

相关问题 更多 >