我有一个带有Datetime索引的数据框,我想用最后一个Datetime进行排序。
例如,我的数据框是:
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)
我得到了一个回报:“无”
我的索引类型是'datetime64'
任何提示将不胜感激。谢谢!
答案 0 :(得分:3)
实际上,您的代码可以在没有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