以下是我的数据框架:
data = pd.DataFrame([['A',1,15,100,123],['A',2,16,50,7],['A',3,17,100,5],['B',1,20,75,123],['B',2,25,125,7],['B',3,23,100,7],['C',1,5,85,12],['C',2,1,25,6],['C',3,7,100,7]],columns = ['Group','Ranking','Data1','Data2','Correspondence'])
Group Ranking Data1 Data2 Correspondence
0 A 1 15 100 123
1 A 2 16 50 7
2 A 3 17 100 5
3 B 1 20 75 123
4 B 2 25 125 7
5 B 3 23 100 7
6 C 1 5 85 12
7 C 2 1 25 6
8 C 3 7 100 7我已经根据“组”对数据框架进行了排序。但是,我仍然需要根据每个组的数据对数据框架进行排序。对于每个组,必须根据最低值到最高值对Data1进行排序,一旦排序,Data2列中的值将遵循Data1的位置。列对应将不会被触及(停留在原来的df)和列排名停留,以及它是。我使用了df.sort_values(),但无法获得如下结果:
Group Ranking Data1 Data2 Correspondence
0 A 1 15 100 123
1 A 2 16 50 7
2 A 3 17 100 5
3 B 1 20 75 123
4 B 2 23 100 7
5 B 3 25 125 7
6 C 1 1 25 12
7 C 2 5 85 6
8 C 3 7 100 7因此,基本上我的目标是:在每个组中,Data1中的排序值从最低到最高,Data2中的值在排序后将遵循Data1的移动,而列对应保持在原来的位置。
谢谢。
发布于 2019-11-12 12:53:54
将DataFrame.sort_values与两列一起使用,并将numpy数组与.values一起分配
cols = ['Data1','Data2']
data[cols] = data.sort_values(['Group','Data1'])[cols].values
#pandas 0.24+
#data[cols] = data.sort_values(['Group','Data1'])[cols].to_numpy()
print (data)
Group Ranking Data1 Data2 Correspondence
0 A 1 15 100 123
1 A 2 16 50 7
2 A 3 17 100 5
3 B 1 20 75 123
4 B 2 23 100 7
5 B 3 25 125 7
6 C 1 1 25 12
7 C 2 5 85 6
8 C 3 7 100 7发布于 2019-11-12 12:52:29
你试过这样吗?
data2 = data.sort_values(by = ['Group', 'Data1'], ascending = (True, False)).reset_index()
data2['Correspondence'] = data['Correspondence']发布于 2019-11-12 12:53:49
你可以尝试这样的方法:
data.sort_values(['Group', 'Data1', 'Data2'], ascending=[True, True, False])如果希望某些列降序,则必须将该列设置为False。
https://stackoverflow.com/questions/58819083
复制相似问题