我有一个这样的数据框:
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,评估此变量,然后始终更新满足最佳目标的用户。
但是有更好的方法吗?我将衷心感谢您的帮助!我很难从数据框中获取有关条件的信息! 约翰,在此先感谢并致以最诚挚的问候,
答案 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
的第一个值即可。