繁体   English   中英

如果所有元素都在一组值中,则检查 pandas dataframe 中的列

[英]Check for a column in pandas dataframe for all elements if they are in a set of values

我们有一个 pandas DataFrame df和一组值set_vals

对于特定的列(假设'name' ),我现在想计算一个新列,只要df['name']的值在set_vals中,该列就为True ,否则为False

一种方法是写:

df['name'].apply(lambda x: x in set_vals)

但是当dfset_vals都变大时,这种方法非常慢。 有没有更有效的方法来创建这个新列?

真正的问题是df['name'].apply(lambda x: x in set_vals)的复杂度是 O(M*N) 其中 M 是df的长度,N 是set_vals的长度,如果set_vals是一个列表(或搜索复杂度为线性的另一种类型)。

如果set_vals进行哈希处理(变成dict类型),复杂度可以提高到O(M),搜索复杂度将是O(1)。

我为您找到了解决方案,它称为 MapReduce。

你可以在这里阅读

总的来说就是一个在多节点上并行处理大数据的编程model。

有一个视频解释并显示了 MapReduce 的示例: MapReduce 视频

这是一个简单解决方案的复杂问题,您可以尝试使用此 for 循环运行多个线程:

假设[0:i], [i+1:j], [j+1,k]等。

Here is a very good explanation关于如何做多线程

此外,如果您对有关性能和效率的更多详细信息感兴趣,请查看内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM