如何使用间隔基于时间删除相同的值?

时间:2019-05-10 22:07:55

标签: python pandas dataframe datetime

我的数据集如下:

Name |        Time     |   App 
---------------------------------
Mike  2019-05-10 21:10 chrome.exe
Mike  2019-05-10 21:10 chrome.exe
Mike  2019-05-10 21:12 chrome.exe
John  2019-05-10 18:09 chrome.exe
John  2019-05-10 18:25 chrome.exe

我的目标是:我希望基于相同的时间或每隔5分钟为每个用户组合相同的应用程序,并且仅保存最早的时间戳。

预期输出:

Name |        Time     |   App 
---------------------------------
Mike  2019-05-10 21:10 chrome.exe
John  2019-05-10 18:09 chrome.exe
John  2019-05-10 18:25 chrome.exe

Mike运行了chrome.exe 3次,但间隔为<= 5,因此我们将其计为一次。约翰跑chrome.exe 2次但间隔> 5分钟,因此算作单独跑步。我已经尝试过mergemerge_asof并使用pd.timedelta

2 个答案:

答案 0 :(得分:3)

让我们首先创建示例数据帧(与您的数据帧有些不同):

data = [('2019-01-01 13:00','John', 'Chrome'),('2019-01-01 13:02','John', 'Chrome'),('2019-01-01 13:06','John', 'Chrome'),('2019-01-01 13:00','Mike', 'Chrome'),('2019-01-01 13:02','Mike', 'Chrome'), ('2019-01-01 13:06','John', 'Chrome')]
df = pd.DataFrame(data, columns =['Time','Name','App'])

您将需要时间作为数据框中的索引。您可以通过以下方式实现此目标:

df.index = pd.to_datetime(df['Time'])

然后您可以执行以下操作:

df.groupby(['Name', 'App', pd.Grouper(freq='5T')]).min() #5T here means 5 minutes

(请注意,这将以五分钟为间隔进行分组,从整小时开始,这意味着就此解决方案而言,13:04和13:06是两个不同的事件)。您可以查找不同的频率以按http://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

分组

结果:

Name  App     Time               
John  Chrome  2019-01-01 13:00:00    2019-01-01 13:00
              2019-01-01 13:05:00    2019-01-01 13:06
Mike  Chrome  2019-01-01 13:00:00    2019-01-01 13:00

第二时间是您感兴趣的时间。结果是pd.Series,您可能希望将其设置为数据框或应用.unstack(level=1)

正如评论中所指出的那样,您可能不一定要同时将Time作为索引和新列,然后您可能想代替df.index = pd.to_datetime(df.Time)

df.set_index('Time', inplace=True)

答案 1 :(得分:1)

您可以尝试以下方法:

df['Time'] = pd.to_datetime(df['Time'])
print(df)
m = df.groupby(['Name','App']).Time.apply(lambda x: x.diff().dt.seconds < 5*60) #mask for 5 minutes
df2=df[~m]
print(df2)

什么是m。我们尝试删除的是重复项的掩码,但我只是分配了一个没有这些行的新数据框。


   Name                Time          App
0  Mike 2019-05-10 21:10:00   chrome.exe
1  Mike 2019-05-10 21:10:00   chrome.exe
2  Mike 2019-05-10 21:12:00   chrome.exe
3  John 2019-05-10 18:09:00   chrome.exe
4  John 2019-05-10 18:25:00  chrome.exe7
   Name                Time          App
0  Mike 2019-05-10 21:10:00   chrome.exe
3  John 2019-05-10 18:09:00   chrome.exe
4  John 2019-05-10 18:25:00  chrome.exe7