Python Pandas:groupby值\u计数按频率和子类别筛选
我在熊猫中有这样一个数据帧:Python Pandas:groupby值\u计数按频率和子类别筛选,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我在熊猫中有这样一个数据帧: Session Rating A Positive A Positive A Positive A Negative B Negative B Negative C Positive 使用counts=df.groupby('Session')['Rating'].value\u counts()我得到一个如下的序列对象: Session Rating A Positi
Session Rating
A Positive
A Positive
A Positive
A Negative
B Negative
B Negative
C Positive
使用counts=df.groupby('Session')['Rating'].value\u counts()
我得到一个如下的序列对象:
Session Rating
A Positive 3
Negative 1
B Negative 2
C Positive 1
我要做的是根据两个标准进行筛选:1) 按频率过滤,因此当计数>1时
2) 按评级筛选=='正' 我发现是1),但我不确定如何做2),因为这是一个系列,我无法获得评级字段。预期结果将是
正3
最后,我想屏蔽我的原始数据帧,以排除所有满足这两个条件的行。非常感谢您的帮助,谢谢 您可以使用这种组合,首先过滤评级为“正”的数据帧,然后通过groupby和value_计数获得一个系列,最后,使用.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
的一种方法,然后是:
你能发布预期的输出吗?谢谢!我使用了您的方法并对其进行了修改,以获得我想要的结果:idxs=df[df.Rating='Positive']['Session'].value_counts().gt(1)df=df.loc[~df['Session'].isin(idxs[idxs].index)]不需要groupby。
res = df.groupby(['Session', 'Rating']).size().reset_index(name='Count')\
.query('(Rating == "Positive") & (Count > 1)')
print(res)
Session Rating Count
1 A Positive 3