Python 当满足第二个条件时,第一个条件失败

Python 当满足第二个条件时,第一个条件失败,python,pandas,dataframe,conditional,Python,Pandas,Dataframe,Conditional,我只想使Pandas数据帧中的行满足以下条件: 1) 用户应与X个以上的项目进行交互 2) 项目应与Y个以上的用户交互 当满足第二个条件时,在应用两个条件后,对于某些用户,第一个条件失败 groupById = df.groupby(['id']).count() remaining = groupById[groupById.itemId > X] df2 = df.loc[df.id.isin(remaining.index)] groupByItem = df2.groupby([

我只想使Pandas数据帧中的行满足以下条件:

1) 用户应与X个以上的项目进行交互 2) 项目应与Y个以上的用户交互

当满足第二个条件时,在应用两个条件后,对于某些用户,第一个条件失败

groupById = df.groupby(['id']).count()
remaining = groupById[groupById.itemId > X]
df2 = df.loc[df.id.isin(remaining.index)]

groupByItem = df2.groupby(['id']).count()
remainingIt = groupByItem[groupByItem.id > Y]
final = df[df.id.isin(remaining.index) & df.itemId.isin(remainingIt.index)]

我无法解决这个问题。有人吗?

问题是在删除交互次数不超过X次的用户后,您对项目进行分组。您首先需要独立检查这两个条件,然后再合并结果。

将熊猫作为pd导入

#set threshold X and Y
X=1
Y=2
#fill dataframe with some users and items
users=pd.Series(['U1','U1','U1','U2'])
items=pd.Series(['Y1','Y2','Y3','Y1'])
frame=pd.DataFrame()
frame['user'] = users.values
frame['item'] = items.values
  user item
0   U1   Y1
1   U1   Y2
2   U1   Y3
3   U2   Y1

#groupby item and user
groupByItem=frame.groupby('item').count().reset_index()
groupByUser=frame.groupby('user').count().reset_index()
item  user
0   Y1     2
1   Y2     1
2   Y3     1
  user  item
0   U1     3
1   U2     1

#filter both on condition
filteredItems=groupByItem.loc[groupByItem['user']>X]
filteredUsers=groupByUser.loc[groupByUser['item']>Y]

#only take records where both user and items appear in filtered list
print(frame[frame['user'].isin(filteredUsers.user) & frame['item'].isin(filteredItems.item)])

  user item
0   U1   Y1

希望这有助于

您如何确定第一个条件失败?可能在计算第一个条件时,您使用了所有项目(过滤前),过滤后,您的项目明显减少,因此第一个条件可能失败