为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过两列或更多列对python pandas中的dataFrame进行排序?

如何通过两列或更多列对python pandas中的dataFrame进行排序?

慕姐4208626 2019-07-26 11:41:51
如何通过两列或更多列对python pandas中的dataFrame进行排序?假设我有一个包含列的数据框a,b并且c我想按列b升序排序数据帧,按列c降序排序,我该怎么做?
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

从pandas 0.17.0开始,DataFrame.sort()不推荐使用,并设置为在未来版本的pandas中删除。现在是通过其值对数据帧进行排序的方法DataFrame.sort_values

因此,现在问题的答案就是

df.sort_values(['b', 'c'], ascending=[True, False], inplace=True)


查看完整回答
反对 回复 2019-07-26
?
慕斯王

TA贡献1864条经验 获得超2个赞

对于数字数据的大型数据帧,您可能会看到显着的性能改进numpy.lexsort,使用一系列键执行间接排序:

import pandas as pdimport numpy as np

np.random.seed(0)df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])df1 = pd.concat([df1]*100000)def pdsort(df1):
    return df1.sort_values(['a', 'b'], ascending=[True, False])def lex(df1):
    arr = df1.values    return pd.DataFrame(arr[np.lexsort((-arr[:, 1], arr[:, 0]))])assert (pdsort(df1).values == lex(df1).values).all()%timeit pdsort(df1)  # 193 ms per loop%timeit lex(df1)     # 143 ms per loop

一个特点是定义的排序顺序numpy.lexsort是相反的:首先(-'b', 'a')按系列排序a。我们否定系列b反映我们希望这个系列按降序排列。


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 4716 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信