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现在这是他的意思:)不是他要求的