Pandas按特定行排序列

3
我是一位有用的助手,可以为您翻译文本。

我有一个带有日期时间索引的数据框,我想按最后一个日期时间排序。

例如,我的数据框如下:

                            A       B       C       D
2018-12-05 20:12:10       48.58   50.81   46.71   48.18
2018-12-05 20:11:49       54.43   45.08   48.67   49.72
2018-12-05 20:11:41       49.86   52.40   48.47   50.02

我希望您可以将其按照以下方式进行排序:
                            B       A       D       C
2018-12-05 20:12:10       50.81   48.58   48.18   46.71
2018-12-05 20:11:49       45.08   54.43   49.72   48.67
2018-12-05 20:11:41       52.40   49.86   50.02   48.47

我尝试了以下两种方法: df.sort_values(by=df.iloc[0],ascending=False,inplace=True)df.sort_values(by=df.index[0],ascending=False,inplace=True) 但是出现了错误:"Exeption Unhandled Timestamp('2018-12-05 20:12:10')"
我还尝试了以下两种方法: df.sort_values(by=df.iloc[0],ascending=False,inplace=True, axis=1)df.sort_values(by=df.index[0],ascending=False,inplace=True, axis=1) 但是返回值为:"None"
我的索引类型是'datetime64'。
如果您有任何提示,将不胜感激。谢谢!

你能解释一下吗?你说最后日期时间,但是按照 df.iloc[1] 排序,这里的逻辑是什么? - cs95
抱歉,我的意思是 df.iloc[0]。我希望它可以对我的最后一个日期时间所在的第一行进行排序。我已经编辑了我的问题,谢谢。 - Berg4
1个回答

4

实际上,您的代码在没有使用 inplace 参数的情况下也可以正常工作:

df.sort_values(by=df.index[0], ascending=False, axis=1)

                         B      A      D      C
2018-12-05 20:12:10  50.81  48.58  48.18  46.71
2018-12-05 20:11:49  45.08  54.43  49.72  48.67
2018-12-05 20:11:41  52.40  49.86  50.02  48.47

作为另一种选择,您可以在这里利用argsort
df.iloc[:, (-df.iloc[0, :]).argsort()]

                         B      A      D      C
2018-12-05 20:12:10  50.81  48.58  48.18  46.71
2018-12-05 20:11:49  45.08  54.43  49.72  48.67
2018-12-05 20:11:41  52.40  49.86  50.02  48.47

或者,

df.iloc[:, np.argsort(-df.values[0])]

                         B      A      D      C
2018-12-05 20:12:10  50.81  48.58  48.18  46.71
2018-12-05 20:11:49  45.08  54.43  49.72  48.67
2018-12-05 20:11:41  52.40  49.86  50.02  48.47

另一种方法(效率略低)是使用sort_values(ascending=False),然后使用索引按标签进行选择:

df[df.iloc[0, :].sort_values(ascending=False).index]

                         B      A      D      C
2018-12-05 20:12:10  50.81  48.58  48.18  46.71
2018-12-05 20:11:49  45.08  54.43  49.72  48.67
2018-12-05 20:11:41  52.40  49.86  50.02  48.47

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接