Python Pandas:按多列排序

时间:2017-03-17 18:32:01

标签: python pandas

我有这个数据帧(df)

A     object
B     object
C     int32
D     object
E     int32
F     float64
G     float64
H     float64
dtype: object

然后我使用此代码对其进行排序

df = df.sort_values(['C', 'E'], ascending=[0, 0])

并且它正确地按C排序,但根本不是E.有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

这将首先根据C对数据帧进行排序,然后如果列C匹配,则将对列E进行排序

df.sort(['C', 'E'])

也许您想要分别对每列进行排序。有点像...

new_c = df.sort('C')
df.drop("C", axis=1, inplace=True)
df["C"] = new_c

答案 1 :(得分:0)

看起来您的代码应该没问题。也许您没有预料到sort_values如何工作?

假设DataFrame df,前两列是对象类型,接下来的两列是整数

df=pd.DataFrame({'A object':['a',1,'b',2],
      'B object':['c',3,'d',4],
       'C int':[1,4,3,1],
       'E int':[0,4,2,1],
       'Strings', ['a','s','d','f']})

您希望按一列整数进行排序,然后根据列#C; C int'进行排序。然后按列' E int'

对这些进行排序
df.sort_values(by=['C int','E int'],ascending=[False,False])

但是,您不能简单地按列排序'对象'或者' B对象'因为它们包含字符串和整数。您可以按字符串排序'但是假设您要将其添加到该行...

df.sort_values(by=['C int','E int','Strings'],ascending=[False,False,True])

第三个标准的添加没有给出任何新内容,因为它们不会在“E int'

中重复出现

您可以按字符串'

排序
df.sort_values(by=['Strings'],ascending=[True])

欢呼声