是否有一个内置函数,允许只选择在熊猫中具有匹配列值的行?
作为一个例子,我有一个熊猫的数据,是由列的用户,每一个电影项目的评级,以及他们给予它的评级(见下文)。有没有一种方法可以使用numpy或熊猫来快速选择两个用户都评价过的电影?换句话说,输出一个列表/数组/数据框,其中包括所有被用户(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
发布于 2017-10-26 02:43:40
也许是这样的:
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
发布于 2017-10-26 02:44:53
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)
https://stackoverflow.com/questions/46944952
复制相似问题