熊猫:groupby value_count按频率和子类别过滤

时间:2018-07-03 20:04:36

标签: python pandas dataframe pandas-groupby

我在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)按评分=='正面'

进行过滤

我发现this thread为1),但是我不确定该怎么做2),因为它是系列赛,我无法获得“评分”字段。预期的结果将是A Positive 3

最后,我想屏蔽我的原始数据框,以排除所有满足这两个条件的行。帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用此组合,首先过滤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

答案 1 :(得分:0)

这是使用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