flo*_*oss 4 dataframe 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
Run Code Online (Sandbox Code Playgroud)
我想sort了hourly由唯一的数据ascending顺序。
我做了什么
我做了:
df.sort_values(by='time', ascending=True)
Run Code Online (Sandbox Code Playgroud)
但它的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
Run Code Online (Sandbox Code Playgroud)
这里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
Run Code Online (Sandbox Code Playgroud)
或者,如果日期不能更改,并且仅需DataFrame.groupby要按时间与lambda函数一起使用,则不进行分组-groupby不排序,因为sort=False参数和group_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
Run Code Online (Sandbox Code Playgroud)