Our data scientist is attempting to generate some fictitious data from the current load profile data, where the 'y' column represents some activity such as "use some electricity," but we only have data for a specific time period, so we want to shift the activity to another time period. As a result, the load was expected to be moved(and added to) from period A to period B, as well as the label 'y'.
So I'm looking for a function that will allow us to transfer the label and power consumption from period A to period B, and leave period A zero or low consumption in order to simulate "use some electricity" in period B, not in period A. When the 'y' label is True, we'd like to map 18:30 to 23:30 and 23:30 to 4:30 at next day.
index ts f1 f2 y
8 2021-10-01 17:00:00 1044.0 0.0 False
9 2021-10-01 17:30:00 26.0 12.0 False
10 2021-10-01 18:00:00 16.0 10.0 False
---------------------------------------- P1
11 2021-10-01 18:30:00 10.0 12.0 False
12 2021-10-01 19:00:00 226.0 32.0 False
13 2021-10-01 19:30:00 86.0 34.0 False
14 2021-10-01 20:00:00 106.0 12.0 False
15 2021-10-01 20:30:00 8.0 18.0 False
16 2021-10-01 21:00:00 70.0 14.0 False
17 2021-10-01 21:30:00 1604.0 0.0 False
18 2021-10-01 22:00:00 1454.0 0.0 False
19 2021-10-01 22:30:00 1724.0 0.0 False
20 2021-10-01 23:00:00 1104.0 0.0 False
---------------------------------------- P2
21 2021-10-01 23:30:00 1232.0 0.0 False
22 2021-10-02 00:00:00 798.0 8.0 False
23 2021-10-02 00:30:00 4342.0 0.0 True
24 2021-10-02 01:00:00 4352.0 0.0 True
25 2021-10-02 01:30:00 4258.0 0.0 True
26 2021-10-02 02:00:00 3350.0 0.0 False
27 2021-10-02 02:30:00 1088.0 0.0 False
28 2021-10-02 03:00:00 1090.0 0.0 False
29 2021-10-02 03:30:00 1558.0 0.0 False
30 2021-10-02 04:00:00 262.0 0.0 False
---------------------------------------- P3
31 2021-10-02 04:30:00 730.0 0.0 False
32 2021-10-02 05:00:00 296.0 0.0 False
33 2021-10-02 05:30:00 192.0 0.0 False
34 2021-10-02 06:00:00 228.0 0.0 False
35 2021-10-02 06:30:00 338.0 0.0 False
---------------------------------------- P4
......
Expected result
index ts f1 f2 y
8 2021-10-01 17:00:00 1044.0 0.0 False
9 2021-10-01 17:30:00 26.0 12.0 False
10 2021-10-01 18:00:00 16.0 10.0 False
---------------------------------------- P1
11 2021-10-01 18:30:00 10.0 12.0 False
12 2021-10-01 19:00:00 226.0 32.0 False
13 2021-10-01 19:30:00 86.0+4342.0 34.0+8.0 True
14 2021-10-01 20:00:00 106.0+4352.0 12.0 True
15 2021-10-01 20:30:00 8.0+4258.0 18.0 True
16 2021-10-01 21:00:00 70.0 14.0 False
17 2021-10-01 21:30:00 1604.0 0.0 False
18 2021-10-01 22:00:00 1454.0 0.0 False
19 2021-10-01 22:30:00 1724.0 0.0 False
20 2021-10-01 23:00:00 1104.0 0.0 False
---------------------------------------- P2
21 2021-10-01 23:30:00 1232.0 0.0 False
22 2021-10-02 00:00:00 798.0 8.0 False
23 2021-10-02 00:30:00 192.0 0.0 False
24 2021-10-02 01:00:00 192.0 0.0 False
25 2021-10-02 01:30:00 192.0 0.0 False
26 2021-10-02 02:00:00 3350.0 0.0 False
27 2021-10-02 02:30:00 1088.0 0.0 False
28 2021-10-02 03:00:00 1090.0 0.0 False
29 2021-10-02 03:30:00 1558.0 0.0 False
30 2021-10-02 04:00:00 262.0 0.0 False
---------------------------------------- P3
31 2021-10-02 04:30:00 730.0 0.0 False
32 2021-10-02 05:00:00 296.0 0.0 False
33 2021-10-02 05:30:00 192.0 0.0 False
34 2021-10-02 06:00:00 228.0 0.0 False
35 2021-10-02 06:30:00 338.0 0.0 False
---------------------------------------- P4
......
Raw for you to reproduce
{'ts': [Timestamp('2021-10-01 17:00:00'),
Timestamp('2021-10-01 17:30:00'),
Timestamp('2021-10-01 18:00:00'),
Timestamp('2021-10-01 18:30:00'),
Timestamp('2021-10-01 19:00:00'),
Timestamp('2021-10-01 19:30:00'),
Timestamp('2021-10-01 20:00:00'),
Timestamp('2021-10-01 20:30:00'),
Timestamp('2021-10-01 21:00:00'),
Timestamp('2021-10-01 21:30:00'),
Timestamp('2021-10-01 22:00:00'),
Timestamp('2021-10-01 22:30:00'),
Timestamp('2021-10-01 23:00:00'),
Timestamp('2021-10-01 23:30:00'),
Timestamp('2021-10-02 00:00:00'),
Timestamp('2021-10-02 00:30:00'),
Timestamp('2021-10-02 01:00:00'),
Timestamp('2021-10-02 01:30:00'),
Timestamp('2021-10-02 02:00:00'),
Timestamp('2021-10-02 02:30:00'),
Timestamp('2021-10-02 03:00:00'),
Timestamp('2021-10-02 03:30:00'),
Timestamp('2021-10-02 04:00:00'),
Timestamp('2021-10-02 04:30:00'),
Timestamp('2021-10-02 05:00:00'),
Timestamp('2021-10-02 05:30:00'),
Timestamp('2021-10-02 06:00:00'),
Timestamp('2021-10-02 06:30:00'),
Timestamp('2021-10-02 07:00:00'),
Timestamp('2021-10-02 07:30:00'),
Timestamp('2021-10-02 08:00:00'),
Timestamp('2021-10-02 08:30:00'),
Timestamp('2021-10-02 09:00:00'),
Timestamp('2021-10-02 09:30:00'),
Timestamp('2021-10-02 10:00:00'),
Timestamp('2021-10-02 10:30:00'),
Timestamp('2021-10-02 11:00:00'),
Timestamp('2021-10-02 11:30:00'),
Timestamp('2021-10-02 12:00:00'),
Timestamp('2021-10-02 12:30:00')],
'f1': [1044.0,
26.0,
16.0,
10.0,
226.0,
86.0,
106.0,
8.0,
70.0,
1604.0,
1454.0,
1724.0,
1104.0,
1232.0,
798.0,
4342.0,
4352.0,
4258.0,
3350.0,
1088.0,
1090.0,
1558.0,
262.0,
730.0,
296.0,
192.0,
228.0,
338.0,
1454.0,
46.0,
196.0,
28.0,
110.0,
206.0,
132.0,
992.0,
212.0,
2462.0,
532.0,
1366.0],
'f2': [0.0,
12.0,
10.0,
12.0,
32.0,
34.0,
12.0,
18.0,
14.0,
0.0,
0.0,
0.0,
0.0,
0.0,
8.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
14.0,
28.0,
8.0,
20.0,
26.0,
28.0,
22.0,
56.0,
4.0,
8.0,
6.0],
'y': [False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
True,
True,
True,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False]
}
Other solutions connect with this one, here and here is the answer to the subproblem of this one.