用布尔值计算熊猫

时间:2018-05-20 14:28:27

标签: python-3.x pandas dataframe

我用熊猫分析数据。

我尝试过如下获取值c4,但它给了我错误信息"系列的真值是模棱两可的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。:

def calcc4():
    lengthwl = pd.DataFrame(df_sample_merged.LWL)
    draughtforep = pd.DataFrame(df_sample_merged.draught)
    if draughtforep / lengthwl <= 0.04:
        c4 = draughtforep / lengthwl
    else:
        c4 = 0.04
    return c4

我认为我收到了错误,因为数据类型为&#34;如果draughtforep / lengthwl&lt; = 0.04:&#34;是布尔值,但我无法弄清楚我应该做什么来获得c4取决于(draughtforep / lengthwl)值。

谢谢!

////////////加入//////

df = pd.DataFrame([[1, 10], [2, 10], [3, 10]], columns=['A', 'B'])

def calcc7():
    breadth = df.A
    lengthwl = df.B
    if (breadth / lengthwl) < 0.11:
        c7 = 0.229577 * (breadth / lengthwl) ** 0.33333
    elif (breadth / lengthwl) > 0.11 and (breadth / lengthwl) < 0.25:
            c7 = (breadth / lengthwl)
    else:
        c7 = 0.5 - 0.625 * (breadth / lengthwl)
    return c7
calcc7()

1 个答案:

答案 0 :(得分:2)

您可以使用嵌套的np.where函数:

def calcc7(df):
    res = np.where(df.A / df.B < 0.11,
                   0.229577 * (df.A / df.B) ** 0.33333,
                   np.where((df.A / df.B > 0.11) & (df.A / df.B < 0.25),
                             df.A / df.B,
                             0.5 - 0.625 * (df.A / df.B)))
    return res