python - 当达到某些值时,Dataframe 删除重复项

标签 python pandas dataframe

我有一个包含重复项的数据框。我想删除这些重复项。我也从 Pandas 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

    最佳答案

    您可以使用 cumsum()关于识别 group 和 groupby 的阈值差异:

    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
    

    关于python - 当达到某些值时,Dataframe 删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64666718/

    相关文章:

    python - 一次导入 CSV 文件目录,每个文件只保留最旧的记录

    python - Pandas:合并(或内部联接)两个数据帧,但仅保留一个数据帧中的列

    python - collection.find 不将任何文档返回到数据框

    python - pandas 数据框中的新列基于带有条件列表的现有列值

    pandas - 根据条件在 Pandas 数据框中填充Na

    python - PyQt4:如何暂停线程直到发出信号?

    python - 从 json 使用 unixtime 从视频创建多个子剪辑?

    python - 如何将整数时间戳转换回 UTC 日期时间?

    python - 使用 Flask 从 API 调用端点的正确方法

    python - Pandas 条件分组依据和总和