[英]Pandas: Filtering rows by the number of occurrences of subgroups
我有一個包含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的所有日期。
謝謝!
PS我對評論的支持:我需要每月至少發布100篇文章且至少連續20個月的人(我不需要連續幾個月,但是如果他們連續的話,那也很好) 。 為此,我想用上面我提供的代碼篩選每個月至少有100個帖子的人。 但是我不知道該如何丟棄僅發布10個月的人(即使每個月至少有100篇文章都富有成果)。
我認為,數據透視表比group_by
更合適。
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
現在,您將擁有一個Pandas Series active_users
,其中索引是用戶ID,值是布爾值,說明該用戶是否有至少20個月的至少100個帖子。 然后,您可以使用該系列過濾原始數據幀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.