I have created some data which looks like this:
import pandas as pd
d = {'Time': ['01.10.2019, 09:56:52', '01.10.2019, 09:57:15', '02.10.2019 09:57:23', '02.10.2019 10:02:58', '02.10.2019 13:11:58', '02.10.2019 13:22:55', '03.10.2019, 09:56:52', '03.10.2019, 09:57:15', '04.10.2019 09:57:23', '04.10.2019 10:02:58', '04.10.2019 13:11:58', '04.10.2019 13:22:55']
,'Action': ['Opened', 'Closed', 'Opened', 'Closed', 'Opened', 'Closed', 'Opened', 'Closed', 'Opened', 'Closed', 'Opened', 'Closed']
,'Name': ['Bayer', 'Bayer', 'ITM', 'ITM', 'ITM' , 'ITM', 'ITM', 'ITM', 'Treso', 'Treso', 'Geco' , 'Geco']}
df = pd.DataFrame(data=d)
Time Action Name
0 01.10.2019, 09:56:52 Opened Bayer
1 01.10.2019, 09:57:15 Closed Bayer
2 02.10.2019, 09:57:23 Opened ITM
3 02.10.2019, 10:03:58 Closed ITM
4 02.10.2019, 13:11:58 Opened ITM
5 02.10.2019, 13:22:55 Closed ITM
6 03.10.2019, 09:56:52 Opened ITM
7 03.10.2019, 09:57:15 Closed ITM
8 04.10.2019, 09:57:23 Opened Treso
9 04.10.2019, 10:03:58 Closed Treso
10 04.10.2019, 13:11:58 Opened Geco
11 04.10.2019, 13:22:55 Closed Geco
Now i want to remove the data by these conditions:
- if the time is under 5 mins between opened and closed and the same name, it should be deleted
- if there is an opened action and the same name and it repeats after the line closed and its on the same day -> it should delete everything which has the same name betweeen the first opened and the last opened. For example line 2 until line 5 should be deleted but not until line 7 because its one day after.
The second Condition For Example: if there is this Input:
Time Action Name
0 02.10.2019, 09:57:23 Opened ITM
1 02.10.2019, 10:03:58 Closed ITM
2 02.10.2019, 13:11:58 Opened ITM
3 02.10.2019, 13:22:55 Closed ITM
4 03.10.2019, 09:56:52 Opened ITM
5 03.10.2019, 09:57:15 Closed ITM
My Output should be like that:
0 02.10.2019, 13:11:58 Opened ITM
1 02.10.2019, 13:22:55 Closed ITM
2 03.10.2019, 09:56:52 Opened ITM
3 03.10.2019, 09:57:15 Closed ITM
because it is the next day so from 2nd October to the 3rd and the others are under 5 mins
but if we have this scenario:
0 02.10.2019, 09:57:23 Opened ITM
1 02.10.2019, 10:03:58 Closed ITM
2 02.10.2019, 13:11:58 Opened ITM
3 02.10.2019, 13:22:55 Closed ITM
4 02.10.2019, 09:56:52 Opened ITM
5 02.10.2019, 09:57:15 Closed ITM
all of the data should be deleted except the second line and the third:
2 02.10.2019, 13:11:58 Opened ITM
3 02.10.2019, 13:22:55 Closed ITM
My wished output should be like this:
Time Action Name
0 02.10.2019, 09:57:23 Opened ITM
3 02.10.2019, 13:22:55 Closed ITM
4 03.10.2019, 09:56:52 Opened ITM
5 03.10.2019, 09:57:15 Closed ITM
6 04.10.2019, 09:57:23 Opened Treso
7 04.10.2019, 10:03:58 Closed Treso
8 04.10.2019, 13:11:58 Opened Geco
9 04.10.2019, 13:22:55 Closed Geco
What I tried:
df_new = df.assign(group=pd.to_datetime(df["Time"]).diff().dt.seconds.gt(300).cumsum()).groupby(["group",
"Time",
"Action",
"Name"]).first()
Could anybody help me?