python删除第一个视图和第一个单击之间的所有行



,所以我一直在尝试失败,并希望得到一些帮助。我想做的是

  • 按用户组组,然后按时间戳进行排序(这是下面的数据框架设置的方式)
  • 现在,我想在第一次点击之前对所有视图进行,然后将其分组为最早的时间戳
    • 或者,删除第一个视图和第一个点击之间的所有内容
  • 如果他们没有点击,并且只有视图,则所有行应被扁平到单行

对于某些上下文,我们正在收集数据,但是由于如何计数视图的错误,每个新的会话都会在会话开始时创建大量额外的视图。

因此,出于这个原因,我们希望在单击之前摆脱所有视图,除了第一个视图。如果特定用户没有单击,那么剩下的唯一的事情应该是第一个视图。不过,在第一次点击之后,正确收集了视图,因此我们要离开这些视图。

因此,如果输入为以下(使用时间戳的整数使其更容易)

将大熊猫作为pd

导入
in = {'id': [123, 123, 123, 123, 234, 234,234, 234, 234, 234, 456, 456, 456],
         'activity': ['view','view','click','click','view','view','view','click', 'view', 'click', 'view', 'view', 'view'] ,
         'timestamp': [1, 2,3,4,1,2,3,4,5,6,1,2,3]}
pd.DataFrame(in)

输出应为

out = {'id': [123,  123, 123, 234, 234, 234, 234, 456],
     'activity': ['view','click','click','view','click','view', 'click', 'view'] ,
     'timestamp': [1, 3,4,1,4,5,6,1,]}
pd.DataFrame(out)

如果有人有任何想法,将不胜感激!

遵循以下步骤

s1=df.activity.eq('view').groupby(df['id']).transform('idxmax') 
# using idxmax find the first view
s2=df.activity.eq('click').groupby(df['id']).transform('idxmax') 
# same logic here find the index of first click 
out=df.loc[(df.index<=s1)|(df.index>=s2)].copy() 
# filter the original df by bool get from above

在这里,我们对唯一的ID进行调整

adjustonlyview=out.activity.eq('view').groupby(df['id']).transform('all') 
# find those id out 
idx_to_drop=out[adjustonlyview].duplicated('id') 
# using duplicate find the the row we do not want to keep 
idx_to_drop=idx_to_drop[idx_to_drop].index 
# get the index of the row we need to drop 
out.drop(idx_to_drop,axis=0,inplace=True) # drop it 
Out[286]: 
     id activity  timestamp
0   123     view          1
2   123    click          3
3   123    click          4
4   234     view          1
7   234    click          4
8   234     view          5
9   234    click          6
10  456     view          1

相关内容

最新更新