我有包含 Timestamp
和 Values
列的数据框。 Timestamp
在行中有日期时间元素。行中的元素从 0:00
到 23:55
。我想按 Timestamp
列对整个数据框进行排序,但我想在第一行中有 06:00
(因为从 00:00
到 05:55
的数据是第二天的数据)。
如何快速正确地完成?尝试了下面的代码,但它从 0:00 到 23:55 排序。可能在 23:55
之后的日期时间增加 1 天(因为 Timestamp
列中的所有数据都具有相同的日期,只有时间不同)
df = df.sort_values(by=['Timestamp'])
df['Timestamp'] 是 dtype: datetime64[ns]
。
答案 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')