按日期时间对数据框进行排序,但从 06:00 开始?

时间:2021-06-07 08:55:07

标签: python pandas sorting datetime

我有包含 TimestampValues 列的数据框。 Timestamp 在行中有日期时间元素。行中的元素从 0:0023:55。我想按 Timestamp 列对整个数据框进行排序,但我想在第一行中有 06:00 (因为从 00:0005:55 的数据是第二天的数据)。

如何快速正确地完成?尝试了下面的代码,但它从 0:00 到 23:55 排序。可能在 23:55 之后的日期时间增加 1 天(因为 Timestamp 列中的所有数据都具有相同的日期,只有时间不同)

            df = df.sort_values(by=['Timestamp'])

df['Timestamp'] 是 dtype: datetime64[ns]

2 个答案:

答案 0 :(得分:1)

之前:

df
    Values  Timestamp
0   0   1900-01-01 00:00:00
1   1   1900-01-01 01:00:00
2   2   1900-01-01 02:00:00
3   3   1900-01-01 03:00:00
4   4   1900-01-01 04:00:00
5   5   1900-01-01 05:00:00
6   6   1900-01-01 06:00:00
7   7   1900-01-01 07:00:00
8   8   1900-01-01 08:00:00
9   9   1900-01-01 09:00:00
10  10  1900-01-01 10:00:00
11  11  1900-01-01 11:00:00
12  12  1900-01-01 12:00:00
13  13  1900-01-01 13:00:00
...

解决方案:

df = df.sort_values('Timestamp')
previous_day = df[df.Timestamp>='1900-01-01 06:00:00']
next_day = df[df.Timestamp<'1900-01-01 06:00:00']
df = pd.concat([previous_day,next_day])
df
    Values  Timestamp
6   6   1900-01-01 06:00:00
7   7   1900-01-01 07:00:00
8   8   1900-01-01 08:00:00
9   9   1900-01-01 09:00:00
10  10  1900-01-01 10:00:00
11  11  1900-01-01 11:00:00
12  12  1900-01-01 12:00:00
13  13  1900-01-01 13:00:00
14  14  1900-01-01 14:00:00
15  15  1900-01-01 15:00:00
16  16  1900-01-01 16:00:00
17  17  1900-01-01 17:00:00
18  18  1900-01-01 18:00:00
19  19  1900-01-01 19:00:00
20  20  1900-01-01 20:00:00
21  21  1900-01-01 21:00:00
22  22  1900-01-01 22:00:00
23  23  1900-01-01 23:00:00
0   0   1900-01-01 00:00:00
1   1   1900-01-01 01:00:00
2   2   1900-01-01 02:00:00
3   3   1900-01-01 03:00:00
4   4   1900-01-01 04:00:00
5   5   1900-01-01 05:00:00

这是基于您的具体问题的解决方案。为了进一步处理,可能值得将 Timestamp 更改为完整的 DateTime。希望我有所帮助:)

答案 1 :(得分:0)

就我而言,我终于使用了下面的解决方案,并且有效

mask = df['Timestamp'] <  dt.datetime.strptime('06:00','%H:%M')
df.loc[mask, 'Timestamp'] += pd.DateOffset(1)
df = df.sort_values('Timestamp')