搜索具有相同日期、时间(时间+/30秒)和事件名称的重复行

2024-03-29 15:39:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含3列的表:日期、时间和事件。我想删除重复行具有相同的日期,相同的时间(时间可以匹配多达+或-30秒的时间在同一个日期)和相同的事件。我附上了表格的图片和所需的输出表格。如您所见,输出表中缺少最后一行。第1行和第3行的日期和时间相同(时差在30秒内),但事件不同。所以第3行没有被删除。另一方面,第6行和第10行具有相同的日期、相同的时间(在彼此的30秒内,我们应该同时考虑+30秒和-30秒)和相同的事件,因此删除重复项,并且只在文件中保留重复行中的第一个。请告知。我的想法是按日期分组,然后比较时间和事件。你知道吗

enter image description here


Tags: 文件时间事件图片表格时差输出表
1条回答
网友
1楼 · 发布于 2024-03-29 15:39:16

这里有一个可能的解决方案-虽然我同意它变得混乱,因为我在工作。根据日期范围的不同,在重新采样到1分钟垃圾箱的过程中可能需要相当长的时间

import pandas as pd

df = pd.read_csv('my_sample_data.csv')
>>>df
         Date        Time Event
0  12/15/2018  6:55:41 AM   abc
1  12/15/2018  1:36:39 PM   def
2  12/15/2018  2:21:56 PM   com
3  12/16/2018  6:00:11 PM   pil
4  12/16/2018  8:22:20 PM   ati
5  12/17/2018  2:29:10 AM   iti
6  12/17/2018  2:29:30 AM   esz
7  12/17/2018  2:29:50 AM   iti
8  12/17/2018  9:04:03 AM   ono
9  12/17/2018  9:35:04 AM   fac

# Create DateTime column
df1 = pd.DataFrame([' '.join([x,y]) for x, y in zip(df['Date'],df['Time'])])
df1.columns = ['DateTime']
df1['DateTime'] = pd.to_datetime(df1['DateTime'])

# Join it back to your original dataframe and set it as the index
df = df.join(df1)
df.set_index('DateTime', inplace=True)

# Bin the data into 1-minute intervals. Join all common events into a single list
outdf = df.resample('1Min')['Event'].unique().to_frame()
outdf.columns = ['Events']
outdf = outdf.loc[outdf['Events'].apply(lambda x: len(x) > 0)]

>>>outdf
                         Events
DateTime
2018-12-15 06:55:00       [abc]
2018-12-15 13:36:00       [def]
2018-12-15 14:21:00       [com]
2018-12-16 18:00:00       [pil]
2018-12-16 20:22:00       [ati]
2018-12-17 02:29:00  [iti, esz]
2018-12-17 09:04:00       [ono]
2018-12-17 09:35:00       [fac]

# Explode the list into separate rows. Solution provided by @Zero at https://stackoverflow.com/questions/32468402/how-to-explode-a-list-inside-a-dataframe-cell-into-separate-rows
>>>outdf['Events'].apply(pd.Series).stack().reset_index(level=2, drop=True).to_frame('Events')

                    Events
DateTime
2018-12-15 06:55:00    abc
2018-12-15 13:36:00    def
2018-12-15 14:21:00    com
2018-12-16 18:00:00    pil
2018-12-16 20:22:00    ati
2018-12-17 02:29:00    iti
2018-12-17 02:29:00    esz
2018-12-17 09:04:00    ono
2018-12-17 09:35:00    fac

相关问题 更多 >