首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas Dataframe中特定列的排序

Pandas Dataframe中特定列的排序
EN

Stack Overflow用户
提问于 2019-11-12 12:46:45
回答 5查看 69关注 0票数 0

以下是我的数据框架:

代码语言:javascript
运行
复制
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(),但无法获得如下结果:

代码语言:javascript
运行
复制
  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的移动,而列对应保持在原来的位置。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-11-12 12:53:54

DataFrame.sort_values与两列一起使用,并将numpy数组与.values一起分配

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-11-12 12:52:29

你试过这样吗?

代码语言:javascript
运行
复制
data2 = data.sort_values(by = ['Group', 'Data1'], ascending = (True, False)).reset_index()
data2['Correspondence'] = data['Correspondence']
票数 0
EN

Stack Overflow用户

发布于 2019-11-12 12:53:49

你可以尝试这样的方法:

代码语言:javascript
运行
复制
data.sort_values(['Group', 'Data1', 'Data2'], ascending=[True, True, False])

如果希望某些列降序,则必须将该列设置为False

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58819083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档