我在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
最后,我想屏蔽我的原始数据框,以排除所有满足这两个条件的行。帮助将不胜感激,谢谢!
答案 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