Python 模糊数列的真值

Python 模糊数列的真值,python,pandas,Python,Pandas,数据就是一个简短的例子。如果这两个条件为真,我将有大约11个不同的“返回”this text“,并将其应用于3k行。我将列名写为变量,以避免为每个条件键入列名 我不断得到一个值错误,真值不明确。我看到的所有帖子都在谈论使用按位&和用括号分隔每个测试。我也是。但它仍然是错误的。我尝试包含完全引用的列,但ValueError上仍然存在错误。如果我从函数中去掉“self”,我会得到TypeError。我不知道该怎么解决这个问题 data = [ [3.5, 6], [-4,-8],[4,1] ] df

数据就是一个简短的例子。如果这两个条件为真,我将有大约11个不同的“返回”this text“,并将其应用于3k行。我将列名写为变量,以避免为每个条件键入列名

我不断得到一个值错误,真值不明确。我看到的所有帖子都在谈论使用按位&和用括号分隔每个测试。我也是。但它仍然是错误的。我尝试包含完全引用的列,但ValueError上仍然存在错误。如果我从函数中去掉“self”,我会得到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)
data=[[3.5,6],-4,-8],[4,1]]
df=pd.DataFrame(数据,列=['line','value'])
l=df[‘线’]
v=df[“值”]
def错误类型(自身):
如果(l>=0)和(v>l):
返回'error1'
elif(l<0)和(v
试试:


但是,更好的矢量化方法是使用
np。选择

cond1 = (df['line'] >= 0) & (df['value'] > df['line'])
cond2 = (df['line'] < 0) & (df['value'] < df['line'])

df['test'] = np.select([cond1,cond2],['error1','error2'],np.nan)

在if语句中需要
all
any
。您有一个系列l,并检查l是否大于等于0。如果我的一部分是负数,一部分是正数呢。if语句模棱两可。是否要检查l的
任何
部分是否为负数,或l的
全部
是否为负数?使用
any
all
。这不是逐行进行的吗。我认为使用df.apply()会在每一行上使用它。第1行也是如此。”如果3.5>=0&6>3.5“return'error1'L仍然是您全球范围内的一个系列。是的,df。是按行走的,但我不是。还是不是100%确定。我认为&意味着这两个条件都必须是真实的,整个条件才是真实的。或者,这只是一种连接条件的方式?如果我需要这两个条件都为真,那么我将如何重写If语句呢?谢谢scott,这很有效。但还是有一些问题。无论如何,我可以使用变量l和v,或者因为我使用的是“行”,所以我需要指定完整的列名?另外,您最初的回答提到使用all/any,这看起来如何?对于give me,我不是一个计算机科学人员,但是当您
l=df['line']
时,您正在df数据帧中获取序列并将其分配给
l
。在你的函数中做一个打印(l)并观察发生了什么。您不是用l“引用”df['line']。你是这么想的。忽略“全部”或“任何”注释,您不需要这样做,因为您是逐行进行的。第二种方法不需要迭代,因为pandas执行一种称为“内部数据对齐”的操作,这意味着pandas中执行的几乎所有操作都将对齐(匹配)索引和列标题上的数据。
   line  value    test
0   3.5      6  error1
1  -4.0     -8  error2
2   4.0      1    None
cond1 = (df['line'] >= 0) & (df['value'] > df['line'])
cond2 = (df['line'] < 0) & (df['value'] < df['line'])

df['test'] = np.select([cond1,cond2],['error1','error2'],np.nan)
   line  value    test
0   3.5      6  error1
1  -4.0     -8  error2
2   4.0      1     nan