相邻列到新列的熊猫比较(布尔)

问题描述 投票:1回答:1

在下面的数据中,我需要根据某些比较添加额外的列。

test_file.csv

day v1  v2  v3
mon 38  42  42
tue 45  35  43
wed 36  45  43
thu 41  35  45
fri 37  42  44
sat 40  43  42
sun 43  40  43

我已经尝试过这些代码行,并且抛出了代码下方显示的错误。

df["Compare_col_1"] = ""
df["Compare_col_2"] = ""

if ((df.v3 < df.v1) & (df.v2 > df.v1)):
    df["Compare_col_1"] = "Balanced"
else:
    df["Compare_col_1"] = "Out_of_Bounds"


if df.v3 < df.v2:
    df["Compare_col_2"] = "Eligible"
else:
    df["Compare_col_2"] = "Slow"

错误(仅使用熊猫)

追溯(最近一次通话):文件“ C:\ Trials \ Test.py”,第291行,位于如果((df.v3 df.v1)):文件“ C:\ Winpy \ WPy64-3770 \ python-3.7.7.amd64 \ lib \ site-packages \ pandas \ core \ generic.py”,行1479,位于__nonzero__f“ {type(self).__ name__}的真值不明确。”ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

[现在,我看过几篇类似this one的文章,就如何将numpy用于所需的结果给出了很好的解释。但是,相同的错误重复如下所示。

新代码(带numpy):

if (np.logical_and((df.SMA_8d < df.ClosePrice) , (df.ClosePrice < df.SMA_3d))):
    df["Mark2"] = "True"
else:
    df["Mark2"] = "False"
追溯(最近一次通话):文件“ C:\ Trials \ Test.py”,第291行,位于如果(np.logical_and((df.v3 df.v1))):文件“ C:\ Winpy \ WPy64-3770 \ python-3.7.7.amd64 \ lib \ site-packages \ pandas \ core \ generic.py”,行1479,位于__nonzero__f“ {type(self).__ name__}的真值不明确。”ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

是否有可能通过比较相邻的列来生成那些新列(更重要的是,仅在熊猫中有一个解决方案...)

在下面的数据中,我需要根据某些比较添加额外的列。 test_file.csv日v1 v2 v3周一38 42 42周二45 35 43周三36 45 43周四41 35 45周五37 42 44周六40 43 42 ...

python-3.x pandas numpy boolean comparison
1个回答
3
投票

您可以使用np.where,例如:

© www.soinside.com 2019 - 2024. All rights reserved.