Python 计算滚动时间窗口中的百分比变化

Python 计算滚动时间窗口中的百分比变化,python,pandas,Python,Pandas,模拟数据帧如下所示: server_name log_time occurrence_in_1h 0 A 2018-05-01 08:00:02 1 1 B 2018-04-30 15:20:43 1 2 B 2018-05-01 15:06:58 1 3 C 2018-04-30 21:07:

模拟数据帧如下所示:

  server_name            log_time  occurrence_in_1h
0           A 2018-05-01 08:00:02                 1
1           B 2018-04-30 15:20:43                 1
2           B 2018-05-01 15:06:58                 1
3           C 2018-04-30 21:07:52                 1
4           C 2018-04-30 22:02:34                 1
5           C 2018-04-30 22:07:31                 2
6           D 2018-04-30 01:20:39                 1
7           D 2018-04-30 01:20:39                 2
8           D 2018-04-30 01:20:39                 3
  server_name            log_time  occurrence_in_1h  occurrence_in_1h_pct_change
0           A 2018-05-01 08:00:02                 1                          0.0
1           B 2018-04-30 15:20:43                 1                          0.0
2           B 2018-05-01 15:06:58                 1                          0.0
3           C 2018-04-30 21:07:52                 1                          0.0
4           C 2018-04-30 21:28:17                 2                          0.0
5           C 2018-04-30 22:02:34                 1                          0.0
6           C 2018-04-30 22:07:31                 2                          1.0
7           C 2018-04-30 22:15:08                 3                         0.5
8           D 2018-04-30 01:20:39                 1                          0.0
9           D 2018-04-30 01:20:39                 2                          0.0
10          D 2018-04-30 01:20:39                 3                          0.0
我想得到每台服务器在列中出现的百分比差异,如下所示:

  server_name            log_time  occurrence_in_1h
0           A 2018-05-01 08:00:02                 1
1           B 2018-04-30 15:20:43                 1
2           B 2018-05-01 15:06:58                 1
3           C 2018-04-30 21:07:52                 1
4           C 2018-04-30 22:02:34                 1
5           C 2018-04-30 22:07:31                 2
6           D 2018-04-30 01:20:39                 1
7           D 2018-04-30 01:20:39                 2
8           D 2018-04-30 01:20:39                 3
  server_name            log_time  occurrence_in_1h  occurrence_in_1h_pct_change
0           A 2018-05-01 08:00:02                 1                          0.0
1           B 2018-04-30 15:20:43                 1                          0.0
2           B 2018-05-01 15:06:58                 1                          0.0
3           C 2018-04-30 21:07:52                 1                          0.0
4           C 2018-04-30 21:28:17                 2                          0.0
5           C 2018-04-30 22:02:34                 1                          0.0
6           C 2018-04-30 22:07:31                 2                          1.0
7           C 2018-04-30 22:15:08                 3                         0.5
8           D 2018-04-30 01:20:39                 1                          0.0
9           D 2018-04-30 01:20:39                 2                          0.0
10          D 2018-04-30 01:20:39                 3                          0.0
我试过使用

df.set_index(['log_time']).groupby(['server_name'])['occurrence_in_1h'].rolling('1h').apply(lambda x:(x.iloc[-1]-x.iloc[0])/x.iloc[0])
它将在第4a行
1.0
中给出
发生率1h
时间窗口中计算
发生率
,而是在
1h
时间窗口内。第9行和第10行也出现了同样的情况,它们应该是
0.0


我知道这是因为没有以前的
1h
时间窗口来计算这些行,但我如何才能实现我想要的?

什么是
“序列号”
?您的示例中没有此列dataframe@AndrejKesely抱歉,我已将其编辑为“服务器名称”