熊猫独立对多列进行排序

时间:2019-02-18 02:44:23

标签: python pandas sorting dataframe

我一直在努力对df的整个列进行排序,但是,我的代码似乎仅适用于第一列(“名称”),并根据第一列对其余的列进行混洗,如下所示:

Index Name Age Education Country 
0    W    2    BS         C
1    V    1    PhD        F 
2    R    9    MA         A
3    A    8    MA         A
4    D    7    PhD        B
5    C    4    BS         C

df.sort_values(by=['Name', 'Age', 'Education', 'Country'],ascending=[True,True, True, True])

这就是我希望得到的:

Index Name Age Education Country 
0     A    1    BS         A
1     C    2    BS         A 
2     D    4    MA         B
3     R    7    MA         C
4     V    8    PhD        C
5     W    9    PhD        F

相反,我得到以下信息:

Index Name Age Education Country 
3     A    8    MA         A
5     C    4    BS         C
4     D    7    PhD        B
2     R    9    MA         A
1     V    1    PhD        F 
0     W    2    BS         C

能否请您阐明一下这个问题。提前谢谢了。 干杯, R。

3 个答案:

答案 0 :(得分:2)

您的代码是按名称,年龄,国家/地区等排序的。

要获取所需内容,您可以对每列进行排序,以按列对列进行排序。例如,

for col in df.columns:
    df[col]=sorted(df[col])

但是您确定那是您想要做的吗? DataFrame的设计使每一行都对应一个条目,例如一个人,并且这些列对应于“姓名”和“年龄”等属性。因此,您不想分别对姓名和年龄进行排序,以免人们的姓名和年龄不匹配。

答案 1 :(得分:1)

您可以沿第0 轴使用np.sort

df[:] = np.sort(df.values, axis=0)
df

   Index Name  Age Education Country
0      0    A    1        BS       A
1      1    C    2        BS       A
2      2    D    4        MA       B
3      3    R    7        MA       C
4      4    V    8       PhD       C
5      5    W    9       PhD       F

当然,您应该注意,对列进行独立排序会弄乱列相对于彼此的顺序,并使数据毫无意义。

答案 2 :(得分:0)

@ cs95非常感谢。另外,如果要获得降序,请在代码末尾添加[::-1]: df [:] = np.sort(df.values,axis = 0)[::-1] 谢谢