簡體   English   中英

熊貓:按子組的出現次數過濾行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM