【发布时间】:2019-10-22 20:10:26
【问题描述】:
数据是一个简短的例子。我将有大约 11 种不同的 '如果这 2 个条件为 True,则返回 'this text' ',并将其应用于 3k 行。我将列名写为变量以避免为每个条件输入列名。
我不断收到 ValueError,真值模棱两可。我看到的所有帖子都在谈论使用按位 & 并用括号分隔每个测试。我做的。但它仍然错误。我尝试包含完全引用的列,但在 ValueError 上仍然存在错误。如果我从函数中取出“自我”,我会得到 TypeError。不知道如何解决这个问题。
data = [ [3.5, 6], [-4,-8],[4,1] ]
df = pd.DataFrame(data, columns=['line','value'])
l = df['line']
v = df['value']
def errortype(self):
if (l >=0) & (v > l):
return 'error1'
elif (l < 0) & (v < l):
return 'error2'
df['test']= df.apply(errortype, axis=1)
【问题讨论】:
-
您的 if 语句中需要
all或any。你有一个系列 l 并且你检查 l 是否 >= 0。好吧,如果 L 的一部分是负数而 L 的一部分是正数会怎样。 if 语句不明确。您是否要检查 l 的any部分是否为负数或 l 的all是否为负数?使用any或all。 -
这不是逐行进行。我认为使用 df.apply() 会在每一行上使用它。所以对于第 1 行。 '如果 3.5>=0 & 6 > 3.5" 返回 'error1'
-
L 仍然是您的全球系列。是的,df。正在按行进行,但 l 不是。
-
仍然不能 100% 确定。我认为 & 意味着两者都需要为真才能使整个条件为真。还是在 Pandas 中它只是连接条件的一种方式?如果我需要两个条件都为真,那么我将如何重写 If 语句?