python-3.x - 如何使用 Pandas 按降序排序日期和按升序排序时间
问题描述
我的df
样子是这样的。它是一个hourly
数据集。
time Open
2017-01-03 09:00:00 5.2475
2017-01-03 08:00:00 5.2180
2017-01-03 07:00:00 5.2128
2017-01-02 09:00:00 5.4122
2017-01-02 08:00:00 5.2123
2017-01-02 07:00:00 5.2475
2017-01-01 09:00:00 5.2180
2017-01-01 08:00:00 5.2128
2017-01-01 07:00:00 5.4122
我想按顺序sort
获取hourly
唯一的数据。ascending
我做了什么?
我做了:
df.sort_values(by='time', ascending=True)
但它sort
的全部价值time
不过我只想sort
这time
部分。
我的新df
应该是这样的:
time Open
2017-01-03 07:00:00 5.2475
2017-01-03 08:00:00 5.2180
2017-01-03 09:00:00 5.2128
2017-01-02 07:00:00 5.4122
2017-01-02 08:00:00 5.2123
2017-01-02 09:00:00 5.2475
2017-01-01 07:00:00 5.2180
2017-01-01 08:00:00 5.2128
2017-01-01 09:00:00 5.4122
这里date
保持不变,但time
有序ascending
。
解决方案
如果需要按日期和时间排序,则创建新列以按 排序,然后使用和 升序参数DataFrame.assign
按两列排序,因为按降序排序,按时间升序,最后使用 删除辅助列:DataFrame.sort_values
dates
DataFrame.drop
df1 = (df.assign(d=df['time'].dt.date,
t=df['time'].dt.time)
.sort_values(['d','t'], ascending=[False, True])
.drop(['d','t'], axis=1))
print (df1)
time Open
2 2017-01-03 07:00:00 5.2128
1 2017-01-03 08:00:00 5.2180
0 2017-01-03 09:00:00 5.2475
5 2017-01-02 07:00:00 5.2475
4 2017-01-02 08:00:00 5.2123
3 2017-01-02 09:00:00 5.4122
8 2017-01-01 07:00:00 5.4122
7 2017-01-01 08:00:00 5.2128
6 2017-01-01 09:00:00 5.2180
或者,如果日期不能更改并且只需要按时间排序,则使用DataFrame.groupby
lambda 函数 - groupby 不排序,因为sort=False
参数 andgroup_keys=False
用于避免MultiIndex
:
df1 = (df.groupby(df['time'].dt.date, sort=False, group_keys=False)
.apply(lambda x: x.sort_values('time')))
print (df1)
time Open
2 2017-01-03 07:00:00 5.2128
1 2017-01-03 08:00:00 5.2180
0 2017-01-03 09:00:00 5.2475
5 2017-01-02 07:00:00 5.2475
4 2017-01-02 08:00:00 5.2123
3 2017-01-02 09:00:00 5.4122
8 2017-01-01 07:00:00 5.4122
7 2017-01-01 08:00:00 5.2128
6 2017-01-01 09:00:00 5.2180
推荐阅读
- angular - Angular 2 - 无效的管道参数:管道“异步管道”的“”
- python - 三次样条插值仅产生 nans 或引发错误
- python - 在 Python XAMPP 中执行简单的“Hello, world”时出现服务器错误 500
- docker - GitLab CI 构建多个 docker + 端到端测试
- javascript - 在我的 Django TextField 中使链接可点击
- linux - 将输入文件从小写转换为大写
- javascript - 更新其可观察对象后未删除 OptionsCaption
- java - 过滤器映射 URL 中使用的过滤器 visitorLogger - 未找到 *.xhtml
- ruby-on-rails - Soapwash_out gem 禁用 nillable 值
- javascript - Angular 4:单击带有参数的链接