Расчет панд с логическим значением - PullRequest
0 голосов
/ 20 мая 2018

Я анализирую данные с пандами.

То, что я пытался сделать, было похоже на приведенное ниже, чтобы получить значение c4, но оно дало мне сообщение об ошибке «Истинное значение Series неоднозначно. Используйте 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

Я думаю, что получил ошибку, потому что тип данных "if draughtforep / lengthwl <= 0,04:" логический, но я не могу понять, чтоя должен сделать, чтобы получить c4 в зависимости от (draughtforep / lengthwl) значения. </p>

Спасибо!

//////////// добавил //////

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 голосов
/ 20 мая 2018

вы можете использовать вложенную 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...