Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 跨多个列排序_Python_Pandas - Fatal编程技术网

Python 跨多个列排序

Python 跨多个列排序,python,pandas,Python,Pandas,您好,我正在尝试对下面的数据帧进行排序,以便对行进行排列,从而使三列中性能最好的列位于顶部。在这种情况下,将是布拉沃公司,因为它有2个在运行中,3个在演习中,1个在射程中 如果名单上有更多的公司,而且很难知道确切的“表现最好的公司”,这种方法会起作用吗 我试过: df = pd.DataFrame([["Alpha", 3, 2, 4], ["Bravo", 2, 3, 1], ["Charlie", 4, 1, 3], ["Delta", 1, 4, 2]], c

您好,我正在尝试对下面的数据帧进行排序,以便对行进行排列,从而使三列中性能最好的列位于顶部。在这种情况下,将是布拉沃公司,因为它有2个在运行中,3个在演习中,1个在射程中

如果名单上有更多的公司,而且很难知道确切的“表现最好的公司”,这种方法会起作用吗

我试过:

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
电流输出:

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

如果要按每行的
mean
s排序,请首先创建
mean
,然后按以下方式添加排序值的位置和值的最后更改顺序:

编辑:如果需要,请通过以下方式删除某些列:


你能分享你的预期产出吗?第0行是公司名单吗?如果是这样,查理2号跑得怎么样?哪一列是?我觉得你的数据框结构很奇怪。这就是事实吗?如果数据帧结构不正确,您能否更正它?这是否回答了您的问题?是的,我会用
df.head()
检查你的
df
,我不认为数据是按照你的想法来表示的。嗨,我在试图理解代码行。这是否意味着在使用.argsort()根据平均值移动行之前,df.mean(axis=1)将计算所有列的平均值?@MooseCakeRunner-您完全正确。我理解问题需要按平均值排序,否则我错了?是的,这是正确的,我想我的首字母不清楚。如果有更多的排名栏和更多的公司行(即成百上千),这种排序方法有效吗?我不需要手动命名要排序的列和行?@MooseCakeRunner-当然,如果需要,表示每行的列数并不重要。如果列之间有其他类似文本字符串的列,我将如何处理这种情况?
Company Running Combat  Range
0   Bravo   2     3     1
1   Delta   1     4     2
2   Charlie 4     1     3
3   Alpha   3     2     4
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