Python 跨多个列排序
您好,我正在尝试对下面的数据帧进行排序,以便对行进行排列,从而使三列中性能最好的列位于顶部。在这种情况下,将是布拉沃公司,因为它有2个在运行中,3个在演习中,1个在射程中 如果名单上有更多的公司,而且很难知道确切的“表现最好的公司”,这种方法会起作用吗 我试过: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
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