我一直在努力对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。
答案 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] 谢谢