熊猫:按子组的出现次数过滤行

时间:2019-07-22 21:22:30

标签: python pandas

我有一个数据框,其中包含ID,其职位和发布日期(四舍五入)。日期是一个索引。我需要过滤出每月且少于20个月内发布少于100个帖子的所有ID

数据框如下所示:

date        id  post    month_year
2017-11-01  123 text1   2017-11
2018-06-01  456 text2   2018-06
2018-06-01  789 text3   2018-09
2019-01-01  112 text4   2019-01
2019-02-01  112 text5   2019-02
2019-03-01  112 text6   2019-03
2019-06-01  112 text7   2018-09

要使用每月的帖子数过滤ID,请使用以下代码:

df.groupby(['id', 'date'], as_index=False).filter(lambda x: len(x) >= 100)

但是我不知道如何按子组中的行数进行过滤。当我尝试仅按日期过滤时,它将计算数据框中肯定超过20的所有日期。

谢谢!

P.S。我从评论中得出的结论是:我需要每月至少发布100篇文章且至少连续20个月的人(我不需要连续几个月,但是如果他们连续的话,那也很好)。为此,我想用上面我提供的代码筛选每个月至少有100个帖子的人。但是我不知道该如何丢弃仅发布10个月的人(即使每个月至少有100篇文章都富有成果)。

1 个答案:

答案 0 :(得分:0)

我认为数据透视表比:git => url更合适。

group_by

您现在将拥有一个Pandas系列 id_month_pt = pd.pivot_table( df, values = 'post', index = 'id', columns = 'month-year', aggfunc = 'count') active_months = id_month_pt >= 100 active_month_counts = active_months.sum(1) active_users = active_month_counts >= 20 ,其中索引是用户ID,值是布尔值,说明该用户是否至少有20个月的至少100个帖子。然后,您可以使用该系列过滤原始数据框。