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