【发布时间】:2022-01-25 23:24:30
【问题描述】:
我有 7 个等长的布尔序列:
msk_valid_structure
msk_submission_context
msk_reference_substance_location
msk_neutral
msk_identifier_origin
msk_two_conversion_methods
msk_no_error_warnings
我需要将它们与逻辑 AND (&) 结合起来,这样:
- 我们总是包含第一个 (msk_valid_structure)
- 我们包括了其余 6 个中的 5 个(所有组合)
我尝试了两种解决方案,但都不满意。
第一个使用reduce,速度很慢:
from itertools import combinations
from functools import reduce
for combination in combinations(msks, 5):
res = reduce(lambda x,y: x&y, combination, msk_valid_structure)
第二个构造的数据帧也很慢:
from itertools import combinations
for combination in combinations(msks, 5):
tmp = pd.DataFrame({i: col for i, col in enumerate(list(combination) + [msk_valid_structure])})
res = tmp.all(axis='columns')
你会如何处理这种情况?
非常感谢您的帮助。
【问题讨论】:
-
通常在循环中创建和/或附加较大的 DataFrame 会非常慢。如何创建一个基本的 Python 数据结构,然后将其全部加载到循环外的最终 DataFrame 中?