gpt4 book ai didi

python - 如何在 python 中自动将条件组合在一起?

转载 作者:太空狗 更新时间:2023-10-30 01:56:34 27 4
gpt4 key购买 nike

我正在尝试在 python 中自动将条件组合在一起。困难在于,如果有多个条件,比如 100 个条件,手工“AND”所有这些条件会很乏味。我如何使用循环来实现这一目标?

import pandas as pd
s1 = pd.Series([1,2,3,4,5,6])
s2 = pd.Series([5,6,7,8,9,10])
s3 = pd.Series([11,12,5,7,8,2])
df = pd.DataFrame({'A': s1,'B': s2,'C': s3})

condition1 = df['A'] > 3
condition2 = df['B'] > 6
condition3 = df['C'] > 5
# AND Operation ->>> Can be achieved with a loop?
select = condition1 & condition2 & condition3

最佳答案

需要注意的几点:

  • 您可以使用列表或字典来存储可变数量的变量。
  • 您的 bool 级数用作 NumPy 数组;因此,您可以组合一系列系列并使用 np.ndarray.all (或 pd.DataFrame.all )来计算它们的交集。

您可以将 bool 系列列表与 NumPy 或 Pandas 一起使用:

conditions = [df['A'] > 3,
df['B'] > 6,
df['C'] > 5]

# all equivalent
select = pd.concat(conditions, axis=1).all(axis=1)
select = np.logical_and.reduce(conditions)
select = np.array(conditions).all(axis=0)

print(select)

array([False, False, False, True, True, False], dtype=bool)

同样地,如果你想命名你的 bool 过滤器,你可以使用字典:

conditions = {1: df['A'] > 3,
2: df['B'] > 6,
3: df['C'] > 5}

select = np.array(list(conditions.values())).all(axis=0)

性能基准测试

性能将非常依赖于数据,您还应该按照 @Kopytok's solution 尝试 reduce并使用您的数据检查性能。

df = pd.concat([df]*1000)

conditions = [df['A'] > 3,
df['B'] > 6,
df['C'] > 5]

conditions = conditions*100

%timeit reduce(lambda x, y: x & y, conditions) # 104 ms per loop
%timeit np.logical_and.reduce(conditions) # 104 ms per loop
%timeit np.array(conditions).all(axis=0) # 99.4 ms per loop
%timeit pd.concat(conditions, axis=1).all(axis=1) # 34.6 ms per loop

关于python - 如何在 python 中自动将条件组合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50930393/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com