是否有内置函数允许仅选择pandas中具有匹配列值的行?
作为一个例子,我有一个熊猫数据框,它由用户列,他们评定的每个电影项以及他们给出的评级组成(见下文)。有没有办法使用numpy或pandas快速选择只有用户评价过的电影?换句话说,输出所有被问题用户(a)和其他所有用户评定过的电影的列表/数组/数据帧?
在下面的示例中,所有用户都对电影7进行了评级。因此,对于用户(a)= 8的查询,理想情况下会输出此用户和所有其他用户的所有常用评级。
user movie rating
8 7 5.0
8 1333 3.0
50 3321 1.0
50 3363 2.0
50 7 3.0
83 50 4.0
83 7 5.0
etc etc etc
output for user 8
50 7 3.0
83 7 5.0
答案 0 :(得分:4)
也许是这样的:
In [11]: df.loc[(df["user"] != 8) & (df["movie"].isin(df.loc[(df.user == 8), "movie"]))]
Out[11]:
user movie rating
4 50 7 3.0
6 83 7 5.0
答案 1 :(得分:1)
IIUC,您希望所有评分为电影7的用户,除了8:
df[(df["movie"].isin(df.loc[(df.user == 8), "movie"])) & (df.user!=8)]
这比安迪的回答略快:
%%timeit
df[(df["movie"].isin(df.loc[(df.user == 8), "movie"])) & (df.user!=8)]
1.13 ms ± 54.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.loc[(df["user"] != 8) & (df["movie"].isin(df.loc[(df.user == 8), "movie"]))]
1.21 ms ± 110 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)