python - Pandas 按特定行对列进行排序
问题描述
我有一个带有日期时间索引的数据框,我想用最后一个日期时间进行排序。
例如,我的数据框是:
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”
任何提示将不胜感激。谢谢!
解决方案
实际上,您的代码将在没有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
推荐阅读
- python - python - 如何从函数调用两个返回的局部变量以验证为python中另一个函数的条件?
- cassandra-3.0 - 选择查询的 Cassandra 时间戳行为
- javascript - D3 堆积条形排序 - 图表仅更新一次
- angular - 基于某些条件的动态路由器重用策略
- python - 在Python中按ID分组时计算数据框列的滚动平均值
- php - 我的表单提交php中的输入数据有问题
- python - 使用 Opencv 进行透视变换
- javascript - 如何以角度验证国家/地区的手机号码?
- javascript - React Redux - 401 - 未经授权 - 请求标头中缺少标头
- vue.js - 组件可以从数据中命名吗?