我有一个pandas数据帧,其列有分钟和秒(日期时间)。时间序列持续几个小时,所以当一个新的小时开始时,分钟和秒数从0开始。我想在每次翻身时加上一小时的日期时间。有没有人对一个简单的方法有任何建议?
加载我的数据的代码
if ($button.text() == "+") {
var newVal = parseFloat(oldValue) < 9 ? parseFloat(oldValue) + 1 : parseFloat(oldValue);
}
我的datetime列现在的样子。
TempDataFrame = pandas.read_csv(filepath_or_buffer=TempDataFilePath, header=0, sep=',', skiprows = 7, encoding='latin-1')
TempDataFrame['Date/Time'] = pandas.to_datetime(TempDataFrame['Date/Time'], format='%M:%S.%f')
我想最终得到的例子
1900-01-01 0:27:58
1900-01-01 0:27:59
1900-01-01 0:28:00
1900-01-01 0:28:01
........
1900-01-01 0:59:57
1900-01-01 0:59:58
1900-01-01 0:59:59
1900-01-01 0:00:00
1900-01-01 0:00:01
1900-01-01 0:00:02
........
1900-01-01 0:59:57
1900-01-01 0:59:58
1900-01-01 0:59:59
1900-01-01 0:00:00
1900-01-01 0:00:01
1900-01-01 0:00:02
etc...
答案 0 :(得分:2)
IIUC然后这将起作用:
In [175]:
df['datetime'] = df['datetime'] + pd.TimedeltaIndex((df['datetime'] < df['datetime'].shift()).cumsum(), 'H')
df
Out[175]:
datetime
0 1900-01-01 00:27:58
1 1900-01-01 00:27:59
2 1900-01-01 00:28:00
3 1900-01-01 00:28:01
4 1900-01-01 00:59:57
5 1900-01-01 00:59:58
6 1900-01-01 00:59:59
7 1900-01-01 01:00:00
8 1900-01-01 01:00:01
9 1900-01-01 01:00:02
10 1900-01-01 01:59:57
11 1900-01-01 01:59:58
12 1900-01-01 01:59:59
13 1900-01-01 02:00:00
14 1900-01-01 02:00:01
15 1900-01-01 02:00:02
因此,这会使用shift
将日期时间与上一行进行比较,如果是这样,当时间小于上一行时,这将返回True
,因为hour
组件保持为0
,我们在此致电cumsum()
:
In [178]:
(df['datetime'] < df['datetime'].shift()).cumsum()
Out[178]:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 1
8 1
9 1
10 1
11 1
12 1
13 2
14 2
15 2
Name: datetime, dtype: int32
然后我们使用它来生成TimedeltaIndex
,以便为每个日期时间添加Series
个小时