簡體   English   中英

熊貓:groupby value_count按頻率和子類別過濾

[英]Pandas: groupby value_count filter by frequency and subcategory

我在Pandas中有一個這樣的數據框:

Session Rating
A       Positive
A       Positive
A       Positive
A       Negative
B       Negative
B       Negative
C       Positive

使用counts = df.groupby('Session')['Rating'].value_counts()我得到了一個Series對象,如下所示:

Session Rating
A       Positive  3
        Negative  1
B       Negative  2
C       Positive  1

我想做的是根據兩個條件進行過濾:
1)按頻率過濾,因此計數> 1
2)按評分==“正”過濾

我發現該線程適用於1),但是我不確定該怎么做2),因為它是一個Series,並且我無法獲得Ratings字段。 預期結果將為A Positive 3

最后,我想屏蔽我的原始數據框,以排除所有滿足這兩個條件的行。 幫助將不勝感激,謝謝!

您可以使用此組合,首先對Ratings =='positive'的數據框進行過濾,然后對groupby和value_counts進行濾波以得到一個序列,最后,將.loc與lambda函數一起使用以創建布爾值,以僅選擇序列中大於1。

df[df.Rating == 'Positive'].groupby('Session')['Rating'].value_counts().loc[lambda x: x>1]

輸出:

Session  Rating  
A        Positive    3
Name: Rating, dtype: int64

這是使用groupby.size ,然后進行query的一種方法:

res = df.groupby(['Session', 'Rating']).size().reset_index(name='Count')\
        .query('(Rating == "Positive") & (Count > 1)')

print(res)

  Session    Rating  Count
1       A  Positive      3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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