首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在熊猫数据中寻找跨列的匹配值

在熊猫数据中寻找跨列的匹配值
EN

Stack Overflow用户
提问于 2017-10-26 02:32:17
回答 2查看 8.6K关注 0票数 1

是否有一个内置函数,允许只选择在熊猫中具有匹配列值的行?

作为一个例子,我有一个熊猫的数据,是由列的用户,每一个电影项目的评级,以及他们给予它的评级(见下文)。有没有一种方法可以使用numpy或熊猫来快速选择两个用户都评价过的电影?换句话说,输出一个列表/数组/数据框,其中包括所有被用户(a)和每个其他用户评级过的电影。

在下面的示例中,所有用户都将电影评级为7。因此,对于用户(a)=8的查询,理想情况下将输出该用户和其他用户的所有公共评级。

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-26 02:43:40

也许是这样的:

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2017-10-26 02:44:53

IIUC,你想要所有被评为电影7级的用户,除了8:

代码语言:javascript
运行
复制
df[(df["movie"].isin(df.loc[(df.user == 8), "movie"])) & (df.user!=8)]

这比安迪下面的回答要快一点:

代码语言:javascript
运行
复制
%%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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46944952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档