首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何给出isin()内部的数据

如何给出isin()内部的数据
EN

Stack Overflow用户
提问于 2022-03-14 10:19:17
回答 1查看 320关注 0票数 0

我希望转换如下的sql查询

代码语言:javascript
复制
SELECT * FROM df WHERE id IN (SELECT id FROM an_df)

变成达斯克的等价物。所以,我正在尝试这样做:

代码语言:javascript
复制
d=df[df['id'].isin(an_df['id'])]

但这是棘手的NotImplementedError:将'dask.datframe.core.DataFrame‘传递给’‘isin’

然后,我将这个an_df‘’id‘转换为如下所示

代码语言:javascript
复制
d=df[df['id'].isin(list(an_df['id']))] or d=df[df['id'].isin(an_df['id'].compute())]

但这很费时。

我想要一个和达斯克一样快的解决方案。df大约有1亿行。

请帮我一把。谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-03-14 12:22:50

我建议添加一个最小的可重复示例,这将使解决这个特定问题更容易:

https://stackoverflow.com/help/minimal-reproducible-example

您似乎正在将an_df['id'].compute()返回的an_df['id'].compute()对象转换为不需要的listisin()将以熊猫系列或数据对象为论据。请参阅:

https://docs.dask.org/en/latest/generated/dask.dataframe.DataFrame.isin.html

在您的示例中,这应该有效:

代码语言:javascript
复制
series_to_match = an_df['id'].compute() 

d=df[df['id'].isin(series_to_match)]

因此,您可以省略.to_list()的演员阵容。我希望这会更快一点,因为这种类型的铸造可以放弃。但这里还有一些事情你需要考虑。取决于an_df['id'].compute()的大小,您可能会遇到麻烦,因为该语句正在将结果的series对象拖到正在运行调度程序的机器的内存中。

如果这个系列足够小,您可以尝试使用client.scatter来确保您的所有工作人员都将该系列保存在内存中,请参见:

http://distributed.dask.org/en/stable/locality.html

如果series是一个巨大的对象,那么您必须以不同的方式来处理这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71466128

复制
相关文章

相似问题

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