我有一个数据框,其中包含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篇文章都富有成果)。
答案 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个帖子。然后,您可以使用该系列过滤原始数据框。