假设我有两个对象:
A是一个名字列表B是一个包含三个栏的熊猫框架:“名字”、“朋友1”、“朋友2”,列出了一个人的名字和他们两个最好的朋友的名字。对于我的应用程序,我想知道:对于A中的每个人,B中的每个人都有一个列表,其中A中的人是两个最好的朋友之一。具体来说,对于A中的每一个人,我想要一个布尔人的列表( my_bool ),其计算方式如下:
for current_name in A:
my_bool = (B['friend1'] == current_name) | (B['friend2'] == current_name)
[ ... other computation using my_bool ... ]计算是可行的,但我正在努力提高效率。例如,当A的长度为15k,B有50k行时,计算时间非常长。
我的学费是:循环扫描B中每一个人的50k行A是没有效率的。是否有一种方法将计算矢量化,例如,在一击(无循环)中创建一个15kx50k矩阵all_bools,然后在需要时读取my_bool (作为all_bools的行)?在另一种语言中,我可以实现这个想法,但我无法用Python实现它。如果这个想法也是垃圾,请随意提出你的建议。
发布于 2021-09-20 21:29:57
您可以使用pd.Series.isin方法,该方法将列表隐式转换为具有更高效查找时间的哈希映射。
my_bool = B['friend1'].isin(A) | B['friend2'].isin(B)https://stackoverflow.com/questions/69259702
复制相似问题