Python:将函数应用于groupby

标签 python pandas group-by apply

我在表单中有一些数据框

userid |      event_time      | activity
   A      2017-01-01 02:20:34      E1
   A      2017-01-01 02:20:50      E2     
   A      2017-03-01 11:23:43      E1                
   A      2017-03-01 11:23:55      E6
   B      2017-01-01 08:24:32      E1                
   B      2017-01-01 08:25:25      E4
   C      2017-01-01 23:19:21      E3                
   C      2017-01-01 23:20:04      E11

我想对每个组应用一个函数(按 userid 分组)。这计算了用户重新经历他们遇到的同一事件的次数。例如,用户 A 在 2017-03-01 11:23:43 重新体验了 E1

 userid   |  activity | cnt_previous_events
    A           E1             0
    A           E2             0
    A           E1             1   
    A           E6             0

我尝试了以下方法:

def previous_event_ctr(group):

    events = set()
    ctr = 0

    for val in group:
        if val in events:
           ctr += 1
        else:
           events.add(val)

    return ctr

并将以下内容应用于我的数据框列,

df.groupby('userid').activity.agg(previous_event_ctr)

但我一直收到 TypeError: 'Series' objects are mutable, thus they cannot be hashed。我应该如何使用 groupby 将此函数应用于我的数据框。

最佳答案

看来你需要cumcount , df 必须首先按 useridevent_time 排序:

df['count'] = df.sort_values(['userid','event_time'])
                .groupby(['userid', 'activity']).activity.cumcount()
print (df)

  userid           event_time activity  count
0      A  2017-01-01 02:20:34       E1      0
1      A  2017-01-01 02:20:50       E2      0
2      A  2017-03-01 11:23:43       E1      1
3      A  2017-03-01 11:23:55       E6      0
4      B  2017-01-01 08:24:32       E1      0
5      B  2017-01-01 08:25:25       E4      0
6      C  2017-01-01 23:19:21       E3      0
7      C  2017-01-01 23:20:04      E11      0

关于Python:将函数应用于groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43585791/

相关文章:

python - isnull(col1,col2) 在 Pandas 中等效

python - 如何绘制日期列表的直方图?

python - Pandas 数据框中的计数和计数

python - 使用 pandas 根据查找表为列分配值

javascript - _.groupBy momentjs 格式返回键未定义

python - pandas groupby 后缺少列

MySQL - 返回匹配查询数据的行数?

python - 如何在python中的arraylist中存储变量

python - 使用 re.finditer 不会返回所有匹配项

python - 当文件在磁盘上更改时自动重新加载 jupyter notebook