【发布时间】:2022-01-23 16:06:01
【问题描述】:
我有一个包含几行和多列的数据框,我已将其转换为一个 numpy 数组以加快计算速度。 Dataframe 的前五列如下所示:
par1 par2 par3 par4 par5
1.502366 2.425301 0.990374 1.404174 1.929536
1.330468 1.460574 0.917349 1.172675 0.766603
1.212440 1.457865 0.947623 1.235930 0.890041
1.222362 1.348485 0.963692 1.241781 0.892205
...
这些列现在存储在一个 numpy 数组 a = df.values
我需要检查五列中的至少两列是否满足条件(即它们的值大于某个阈值)。最初,我编写了一个直接在数据帧上执行操作的函数。但是,由于我的数据量非常大,需要一遍又一遍地重复计算,所以我切换到 numpy 以利用矢量化。
检查我想使用的条件
df['Result'] = np.where(condition_on_parameters > 2, True, False)
但是,我无法弄清楚如何编写 condition_on_parameters 以便在 5 个参数中至少有 2 个大于阈值时返回 True 或 False。我想在condition_on_parameters 上使用sum() 函数,但我不确定如何编写这样的条件。
编辑
指定每个参数的阈值不同是很重要的。例如thr1=1.2, thr2=2.0, thr3=1.5, thr4=2.2, thr5=3.0。所以我需要检查 par1 > thr1, par2 > thr2, ..., par5 > thr5。
【问题讨论】:
-
它是
df.values,没有()。转换为numpy不会加快计算速度,dataframe在底层已经是np.array。df.gt(.5).sum(1).ge(2)为阈值.5做你想做的事。 -
哇!来这里回答,但我正在学习新东西...... SO
-
这很好,但它可以在多种条件下工作吗?例如 par1 > 0.5、par2 > 1.2、par3 > 3 等。在这种情况下,我需要在每一列上指定条件,然后求和并检查它何时大于或等于 2。
-
@user12394113 - 如果您有其他要求,请更新您的问题。如果您提供带有示例条件和预期输出的最小输入示例,将会有所帮助。你可以利用广播
df.gt([.5,.3,.2,.5,.8]).sum(1).ge(2) -
@MichaelSzczesny:天才!