我的数据集如下:
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分钟,因此算作单独跑步。我已经尝试过merge
,merge_asof
并使用pd.timedelta
。
答案 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