在多个条件下使用 numpy.where 函数但出现 valueError
Using numpy.where function with multiple conditions but getting valueError
所以我有一个包含多列的数据框,其中包含数字。它看起来像这样:
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)
我想逐行执行操作
- 当第n行'H'的值>第n行'T'的值
- 当第n行'P'中的值大于0时
但是如果我 运行 代码,我会得到“ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item (), a.any() 或 a.all()."
我需要解决什么问题?也许我需要使用 row['column name']?感谢您的帮助!
您应该使用按位 &
和括号,而不是 and
。
df['R'] = numpy.where((df['H'] > df['T']) & (df['P'] > 0),
df['C'] / df['T'] - 1, 0)
试试这个。
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
所以我有一个包含多列的数据框,其中包含数字。它看起来像这样:
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)
我想逐行执行操作
- 当第n行'H'的值>第n行'T'的值
- 当第n行'P'中的值大于0时
但是如果我 运行 代码,我会得到“ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item (), a.any() 或 a.all()."
我需要解决什么问题?也许我需要使用 row['column name']?感谢您的帮助!
您应该使用按位 &
和括号,而不是 and
。
df['R'] = numpy.where((df['H'] > df['T']) & (df['P'] > 0),
df['C'] / df['T'] - 1, 0)
试试这个。
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