我有一个数据帧,用于跟踪白天规则或夜间规则何时生效(与一天中的实际时间无关(。我需要跟踪数据帧何时从白天切换到晚上,反之亦然。
我的新列将显示rules_in_effect
中第一组day
的day_1
然后,当rules_in_effect
从day
切换到night
时,新列将显示更改为night_1
。然后,对于每个对应的交换机,day_2
、night_2
等等。
我试着对它们进行绝对的微分,并对绝对的变化进行累积求和,然而这只是给了我一个求和。
如何添加此新列?提前感谢您的帮助。
date rules_in_effect
0 2021-01-04 07:00:00 day
1 2021-01-04 08:00:00 day
2 2021-01-04 09:00:00 day
3 2021-01-04 10:00:00 day
4 2021-01-04 11:00:00 day
5 2021-01-04 12:00:00 day
6 2021-01-04 13:00:00 day
7 2021-01-04 14:00:00 day
8 2021-01-04 15:00:00 day
9 2021-01-04 16:00:00 day
10 2021-01-04 17:00:00 day
11 2021-01-04 18:00:00 night
12 2021-01-04 19:00:00 night
13 2021-01-04 20:00:00 night
14 2021-01-04 21:00:00 night
15 2021-01-04 22:00:00 night
16 2021-01-04 23:00:00 night
17 2021-01-05 00:00:00 night
18 2021-01-05 01:00:00 night
19 2021-01-05 02:00:00 night
20 2021-01-05 03:00:00 night
21 2021-01-05 04:00:00 night
22 2021-01-05 05:00:00 night
23 2021-01-05 06:00:00 night
24 2021-01-05 07:00:00 day
25 2021-01-05 08:00:00 day
26 2021-01-05 09:00:00 day
27 2021-01-05 10:00:00 day
28 2021-01-05 11:00:00 day
29 2021-01-05 12:00:00 day
30 2021-01-05 13:00:00 day
31 2021-01-05 14:00:00 day
32 2021-01-05 15:00:00 day
33 2021-01-05 16:00:00 day
34 2021-01-05 17:00:00 day
35 2021-01-05 18:00:00 night
36 2021-01-05 19:00:00 night
37 2021-01-05 20:00:00 night
38 2021-01-05 21:00:00 night
etc...
试试这个:
df['newcol'] = (df['rules_in_effect'].astype(str) +
"_" +
(((df['rules_in_effect'] != df['rules_in_effect'].shift()).cumsum() + 1) // 2)
.astype(str)
)
输出:
date rules_in_effect newcol
0 2021-01-04 07:00:00 day day_1
1 2021-01-04 08:00:00 day day_1
2 2021-01-04 09:00:00 day day_1
3 2021-01-04 10:00:00 day day_1
4 2021-01-04 11:00:00 day day_1
5 2021-01-04 12:00:00 day day_1
6 2021-01-04 13:00:00 day day_1
7 2021-01-04 14:00:00 day day_1
8 2021-01-04 15:00:00 day day_1
9 2021-01-04 16:00:00 day day_1
10 2021-01-04 17:00:00 day day_1
11 2021-01-04 18:00:00 night night_1
12 2021-01-04 19:00:00 night night_1
13 2021-01-04 20:00:00 night night_1
14 2021-01-04 21:00:00 night night_1
15 2021-01-04 22:00:00 night night_1
16 2021-01-04 23:00:00 night night_1
17 2021-01-05 00:00:00 night night_1
18 2021-01-05 01:00:00 night night_1
19 2021-01-05 02:00:00 night night_1
20 2021-01-05 03:00:00 night night_1
21 2021-01-05 04:00:00 night night_1
22 2021-01-05 05:00:00 night night_1
23 2021-01-05 06:00:00 night night_1
24 2021-01-05 07:00:00 day day_2
25 2021-01-05 08:00:00 day day_2
26 2021-01-05 09:00:00 day day_2
27 2021-01-05 10:00:00 day day_2
28 2021-01-05 11:00:00 day day_2
29 2021-01-05 12:00:00 day day_2
30 2021-01-05 13:00:00 day day_2
31 2021-01-05 14:00:00 day day_2
32 2021-01-05 15:00:00 day day_2
33 2021-01-05 16:00:00 day day_2
34 2021-01-05 17:00:00 day day_2
35 2021-01-05 18:00:00 night night_2
36 2021-01-05 19:00:00 night night_2
37 2021-01-05 20:00:00 night night_2
38 2021-01-05 21:00:00 night night_2