python - 使用具有多个条件但得到 valueError 的 numpy.where 函数

所以我有一个包含多个列的数据框,其中包含数字。它看起来像这样:

H C T P R
300 200 500 0.3
500 400 300 0.2

我正在尝试对 H、C、T、P 列执行操作并填写 R 列。

例如,

df['R'] = numpy.where(df['H'] > df['T'] and df['P'] > 0,
                      df['C'] / df['T'] - 1, 0)

我希望逐行执行操作

  1. 当第n行'H'的value >第n行'T'的value
  2. 当第 n 行 'P' 中的 value 大于 0 时

但是,如果我运行代码,我会得到“ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all( )。”

我需要解决什么问题?也许我需要使用 row['column name']?任何帮助表示赞赏!

回答1

您应该使用按位 & 和括号,而不是 and

df['R'] = numpy.where((df['H'] > df['T']) & (df['P'] > 0),
                      df['C'] / df['T'] - 1, 0)

回答2

尝试这个。

import pandas as pd
d = {'H': [300, 500], 'C': [200, 400], 'T': [500, 300], 'P': [0.3, 0.2]}
df = pd.DataFrame(d)
df

创建一个函数:

def calc(row):
    if row[0] > row[2]:
        if row[3] > 0:
            return row[1]/row[2] - 1
    else:
        return 0

然后按行应用函数

df['R'] = df.apply(calc, axis=1)
df

相似文章

随机推荐

最新文章