当达到某些值时,数据框将删除重复项

时间:2020-11-03 16:26:24

标签: python pandas dataframe

我有一个包含重复项的数据框。我想删除这些重复项。我还从熊猫df.drop_duplicates(subset=['Action', 'Name'])中找到了此功能。 不幸的是,此功能删除的太多,因为只有在时间小于或等于5分钟时,才应删除它。

如何执行此操作以及如何打印删除的行数?我会很高兴获得帮助。

  • 如何识别重复项?如果列(动作,名称)相同,并且时差小于或等于5分钟。

。时间格式为01.10.2019, 9:56:52,日期和时间以逗号分隔

import pandas as pd
d = {'Time': ['01.10.2019, 9:56:52', '01.10.2019, 9:57:15', '02.10.2019 12:56:12', '02.10.2019 13:02:58', '02.10.2019 13:11:58']
     ,'Action': ['Opened', 'Opened', 'Closed', 'Opened', 'Opened']
     ,'Name': ['Max', 'Max', 'Susan', 'Michael', 'Michael']}
df = pd.DataFrame(data=d)
display(df.head())

输出

enter image description here

所需的输出

enter image description here

详细信息

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以在阈值差异上使用cumsum()来识别分组和分组依据:

groups = (df.groupby(['Action', 'Name'])['Time']
                 .transform(lambda x: x.diff().gt('5min').cumsum())
              )
df.groupby([groups,'Action','Name'], as_index=False).head(1)

输出:

                 Time  Action     Name
0 2019-01-10 09:56:52  Opened      Max
2 2019-02-10 12:56:12  Closed    Susan
3 2019-02-10 13:02:58  Opened  Michael

答案 1 :(得分:2)

IIUC,您可以通过获取时差,然后创建groupgroupby来创建first数字:

print (df.assign(group=pd.to_datetime(df["Time"]).diff().dt.seconds.gt(300).cumsum())
         .groupby(["group", "Action", "Name"]).first())

                      Time  Action     Name
group                                      
0      01.10.2019, 9:56:52  Opened      Max
1      02.10.2019 12:56:12  Closed    Susan
2      02.10.2019 13:02:58  Opened  Michael
3      02.10.2019 13:11:58  Opened  Michael