当第二个条件满足时,第一个条件不满足
问题描述:
我只是想保持行的熊猫数据帧满足下列条件:当第二个条件满足时,第一个条件不满足
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次交互的用户之后对项目进行分组。你首先需要在两种情况下独立检查,然后结合结果。 import pandas as 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
希望这有助于
你是如何确定第一条件失败? – EFT
也许当你计算第一个条件,你使用所有的项目(过滤之前),并在你过滤后,你显然有更少的项目,所以第一个条件可能会失败 – Dotan