Python 对数据帧中的特定列进行排序
下面是我的数据框:Python 对数据帧中的特定列进行排序,python,pandas,sorting,dataframe,data-manipulation,Python,Pandas,Sorting,Dataframe,Data Manipulation,下面是我的数据框: 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'])
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
我已经根据“组”对数据帧进行了排序。但是,我仍然需要根据每组的数据对数据帧进行排序。对于每个组,必须根据从低到高的值对数据1进行排序,排序后,列Data2中的值将跟随数据1的位置。列对应关系将不会被触动(保持原样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的移动,而列对应关系保持在原来的位置
谢谢。你试过这样吗
data2=data.sort_值(按=['Group','Data1'],升序=(True,False)).reset_索引()
数据2['correlations']=数据['correlations']
您可以尝试以下方法:
data.sort_values(['Group', 'Data1', 'Data2'], ascending=[True, True, False])
如果希望某些列降序,则必须将该列设置为False
与这两列一起使用,并使用将numpy数组的值赋回:
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
您是否尝试过对值进行排序功能?基于此,您可以这样做:
data.sort_values(['Group', 'Data1'], ascending=[True, False])
使用左连接(合并
),如下所示
df2 = df.sort_values(['Group', 'Data1']).reset_index()
df3 = df2[['Group', 'Ranking', 'Data1', 'Data2']].join(df[['Correspondence']])
df3
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 3 7 100 123
4 B 1 20 75 7
5 B 3 23 100 7
6 B 2 25 125 12
7 C 2 1 25 6
8 C 1 5 85 7
结果如下
df2 = df.sort_values(['Group', 'Data1']).reset_index()
df3 = df2[['Group', 'Ranking', 'Data1', 'Data2']].join(df[['Correspondence']])
df3
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 3 7 100 123
4 B 1 20 75 7
5 B 3 23 100 7
6 B 2 25 125 12
7 C 2 1 25 6
8 C 1 5 85 7
我不想告诉你这一点,但你没有被归类在组(见索引8)啊,是的,这是我的错误。索引8应该是C。我为混乱道歉。更仔细地阅读demends现在这是他的意思:)不是他要求的