如何在Pandas数据框上应用带模式的布尔过滤器?

时间:2019-02-03 13:43:50

标签: python python-3.x pandas dataframe filter

我有一个这样的数据框:

    userId  eventType
       1    action
       1    action
       1    inactive
       1    action
       1    inactive
       1    action
       1    action
       1    action
       2    action
       2    inactive
       2    inactive
       2    action
       ....  ....

我的目标是从用户中过滤UserID,该用户具有最多的“操作”条目,但也至少有一个不活动的条目!伪代码:

find user: max useractions & atleast one time inactive

是否有一种聪明的方法来处理数据框...上面的数据框包含10000多个条目。我可以循环执行此操作,并遍历每个用户,在temp变量中找到其eventType,评估此变量,然后始终更新满足最佳目标的用户。

但是有更好的方法吗?我将衷心感谢您的帮助!我很难从数据框中获取有关条件的信息! 约翰,在此先感谢并致以最诚挚的问候,

1 个答案:

答案 0 :(得分:3)

您可以使用掩码过滤至少userId'inactive'的数据,然后在计数userId个值的同时过滤这些'active'的数据帧:

mask = df['eventType'] == 'inactive'
inactives = df.loc[mask, 'userId'].unique()

res = df.loc[df['userId'].isin(inactives) & ~mask, 'userId'].value_counts().index[0]  # 1

注意pd.Series.value_counts返回一个按最高计数顺序排序的序列,其中userId为索引。因此,您只需获取其index的第一个值即可。