我创建了一些数据:
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']
,'Action': ['Opened', 'Closed', 'Opened', 'Closed', 'Opened', 'Closed']
,'Name': ['CTO', 'CTO', 'CFO', 'CFO', 'CFO' , 'CFO']}
df = pd.DataFrame(data=d)
Time Action Name
0 01.10.2019, 09:56:52 Opened CTO
1 01.10.2019, 09:57:15 Closed CTO
2 02.10.2019, 09:57:23 Opened CFO
3 02.10.2019, 10:02:58 Closed CFO
4 02.10.2019, 13:11:58 Opened CFO
5 02.10.2019, 13:22:55 Closed CFO
现在我想在时间<;5分钟,如果有多行具有相同名称,则应将行放在第一个“打开”操作和最后一个“关闭”操作之间,因此每次都将首先作为操作打开,然后在名称相同时关闭。我试过了
mask = df.drop(df[pd.to_datetime(df["Time"]).diff().dt.seconds.gt(300)].index)
但这只显示了前三行。我怎么能这么做
我的输出应该是这样的:
Time Action Name
0 02.10.2019, 09:57:23 Opened CFO
1 02.10.2019, 13:22:55 Closed CFO
因为前两行不到5分钟,第三行和第四行与之前的名称相同。但如果日期是一天后,则应如下所示:
Time Action Name
2 02.10.2019, 09:57:23 Opened CFO
3 02.10.2019, 10:02:58 Closed CFO
4 03.10.2019, 13:11:58 Opened CFO
5 03.10.2019, 13:22:55 Closed CFO
也许不是世界上最干净的方式,但它完成了任务:
相关问题 更多 >
编程相关推荐