python - 在 pandas 数据框中查找频繁用户

标签 python group-by pandas dataframe

我有一个 pandas 数据框,其中包含名为 user_id 和 login_date 的列,我想获取频繁用户的 ID(即登录多次)及其登录频率。

为此,我尝试了:

    frequent_users = df.groupby(['login_date', 'user_id']).agg({"user_id": lambda x: x.count()})

结果是:

2011-01-17

          556     1
          456     1
          958     1
          374     2

2011-01-18

          789     1
          434     4
          654     1

问题是,如何删除或过滤掉频率为 1 的所有条目?

编辑:

这是一个例子:

    login_dates = ['2011-01-17', '2011-01-17', '2011-01-17', '2011-01-17', '2011-01-17', '2011-01-18', '2011-01-18','2011-01-18','2011-01-18', '2011-01-18', '2011-01-18']
    user_id =[556,456,958,347,347,789,434,434,434,434,654]
    df = DataFrame({'login_date': login_dates, 'user_id': user_id})
    frequent_users = df.groupby(['login_date', 'user_id']).agg({"user_id": lambda x: x.count()})

最佳答案

我认为在这里使用 apply 可能更简单:

# instead of lambda x: x.count()
def count_more_than_one(x):
    c = x.value_counts()
    return c[c > 1]

In [11]: df.groupby(['login_date'])['user_id'].apply(count_more_than_one)
Out[11]:
login_date
2011-01-17  347    2
2011-01-18  434    4
dtype: int64

In [12]: df.groupby(['login_date'])['user_id'].apply(count_more_than_one).unstack(1)
Out[12]:
            347  434
login_date
2011-01-17    2  NaN
2011-01-18  NaN    4

关于python - 在 pandas 数据框中查找频繁用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21964990/

相关文章:

mysql - MySQL 上的 GROUP BY

mysql - 最新Group By MYSQL+链接表

python - 正则表达式作为分隔符来读取 python (Pandas) 中的表

python - 我的美丽汤刮刀无法按预期工作

python - 这个 "score"到底是什么?使用 sklearn/Python 的额外树分类器

mysql - SQL GROUP BY 和 HAVING 问题

python - Pandas:使用 [column name][row_number] 选择数组的值仅适用于 multiindex

python - 按特定列排序,但将具有相同主索引的项目放在一起

python - Matplotlib:用不同颜色绘制大量断开的线段

python - 如何在一张图中显示多张图片