Python 创建的新列的值不正确

Python 创建的新列的值不正确,python,loops,variables,apply,Python,Loops,Variables,Apply,我有两个列a和b,都是二进制变量 a b 1 1 0 1 1 1 0 0 0 0 ... 1 1 0 1 1 0 0 0 0 0 在检查以下一些条件后,我需要创建一个新变量c: def test_func(data): if data['a'] == 0 & data['b'] == 0: return 1; if data['a'] == 0 & data[

我有两个列a和b,都是二进制变量

    a b
    1 1
    0 1
    1 1
    0 0
    0 0
...
    1 1
    0 1
    1 0
    0 0
    0 0
在检查以下一些条件后,我需要创建一个新变量c:

def test_func(data):
    if data['a'] == 0 & data['b'] == 0:
        return 1;
    if data['a'] == 0 & data['b'] == 1:
        return 2;
    if data['a'] == 1 & data['b'] == 0:
        return 3;
    if data['a'] == 1 & data['b'] == 1:
        return 4;
    else:
        return 0

data['c'] = data.apply(test_func, axis=1)
print(data['c'] )
但我只在新的列c中得到了值1和4,也得到了值0。事实上,这四种组合都有(没有得到0的组合)。但是没有把它们放在新的c列中。我可以知道怎么做吗

Desired output:
    a b c
    1 1 4
    0 1 2
    1 1 4
    0 0 1
    0 0 1
...
    1 1 4
    0 1 2
    1 0 3 
    0 0 1
    0 0 1


But what i got:
        a b c
        1 1 4
        0 1 1
        1 1 4
        0 0 1
        0 0 1
    ...
        1 1 4
        0 1 1
        1 0 0 
        0 0 1
        0 0 1

我相信您试图做的事情中的问题来自于在代码中使用
&
,而我相信您想要的是
。这两条在python中不同(更多信息/示例),但基本上是
检查这两条语句的计算结果是否为
True
,而
&
是位运算符

因此,请尝试将代码更改为:

def test_func(data):
    if data['a'] == 0 and data['b'] == 0:
        return 1;
    if data['a'] == 0 and data['b'] == 1:
        return 2;
    if data['a'] == 1 and data['b'] == 0:
        return 3;
    if data['a'] == 1 and data['b'] == 1:
        return 4;
    else:
        return 0
另一方面,您应该尽量避免在一个函数中使用太多的return语句,因为这可能会让人非常困惑。例如,您可以将其替换为在每个
if
块中更改的
result
变量,也可以将单个
if
语句更改为也使用
elif

我对这个基本例子的建议是:

def test_func(data):
    result = 0

    if data['a'] == 0 and data['b'] == 0:
        result = 1
    elif data['a'] == 0 and data['b'] == 1:
        result = 2
    elif data['a'] == 1 and data['b'] == 0:
        result = 3
    elif data['a'] == 1 and data['b'] == 1:
        result = 4
    
    return result
data={"a":1, "b":0} #for example
def test_func(*args):
    if data['a'] == 0 and data['b'] == 0:
        return 1
    elif data['a'] == 0 and data['b'] == 1:
        return 2
    elif data['a'] == 1 and data['b'] == 0:
        return 3
    elif data['a'] == 1 and data['b'] == 1:
        return 4
    else:
        return 0

data["c"]=test_func(data)
print(data["c"])

我相信您试图做的事情中的问题来自于在代码中使用
&
,而我相信您想要的是
。这两条在python中不同(更多信息/示例),但基本上是
检查这两条语句的计算结果是否为
True
,而
&
是位运算符

因此,请尝试将代码更改为:

def test_func(data):
    if data['a'] == 0 and data['b'] == 0:
        return 1;
    if data['a'] == 0 and data['b'] == 1:
        return 2;
    if data['a'] == 1 and data['b'] == 0:
        return 3;
    if data['a'] == 1 and data['b'] == 1:
        return 4;
    else:
        return 0
另一方面,您应该尽量避免在一个函数中使用太多的return语句,因为这可能会让人非常困惑。例如,您可以将其替换为在每个
if
块中更改的
result
变量,也可以将单个
if
语句更改为也使用
elif

我对这个基本例子的建议是:

def test_func(data):
    result = 0

    if data['a'] == 0 and data['b'] == 0:
        result = 1
    elif data['a'] == 0 and data['b'] == 1:
        result = 2
    elif data['a'] == 1 and data['b'] == 0:
        result = 3
    elif data['a'] == 1 and data['b'] == 1:
        result = 4
    
    return result
data={"a":1, "b":0} #for example
def test_func(*args):
    if data['a'] == 0 and data['b'] == 0:
        return 1
    elif data['a'] == 0 and data['b'] == 1:
        return 2
    elif data['a'] == 1 and data['b'] == 0:
        return 3
    elif data['a'] == 1 and data['b'] == 1:
        return 4
    else:
        return 0

data["c"]=test_func(data)
print(data["c"])

数据是字典吗?从你的符号来看是这样的。 定义了什么应用(func,val)方法? 假设您有一个类似{“a”:1,“b”:1}的字典数据或a和b的1和0的任意组合,那么使用您的函数将是:

def test_func(data):
    result = 0

    if data['a'] == 0 and data['b'] == 0:
        result = 1
    elif data['a'] == 0 and data['b'] == 1:
        result = 2
    elif data['a'] == 1 and data['b'] == 0:
        result = 3
    elif data['a'] == 1 and data['b'] == 1:
        result = 4
    
    return result
data={"a":1, "b":0} #for example
def test_func(*args):
    if data['a'] == 0 and data['b'] == 0:
        return 1
    elif data['a'] == 0 and data['b'] == 1:
        return 2
    elif data['a'] == 1 and data['b'] == 0:
        return 3
    elif data['a'] == 1 and data['b'] == 1:
        return 4
    else:
        return 0

data["c"]=test_func(data)
print(data["c"])

数据是字典吗?从你的符号来看是这样的。 定义了什么应用(func,val)方法? 假设您有一个类似{“a”:1,“b”:1}的字典数据或a和b的1和0的任意组合,那么使用您的函数将是:

def test_func(data):
    result = 0

    if data['a'] == 0 and data['b'] == 0:
        result = 1
    elif data['a'] == 0 and data['b'] == 1:
        result = 2
    elif data['a'] == 1 and data['b'] == 0:
        result = 3
    elif data['a'] == 1 and data['b'] == 1:
        result = 4
    
    return result
data={"a":1, "b":0} #for example
def test_func(*args):
    if data['a'] == 0 and data['b'] == 0:
        return 1
    elif data['a'] == 0 and data['b'] == 1:
        return 2
    elif data['a'] == 1 and data['b'] == 0:
        return 3
    elif data['a'] == 1 and data['b'] == 1:
        return 4
    else:
        return 0

data["c"]=test_func(data)
print(data["c"])

如果使用括号,则仍然可以使用(&F)

def test_func(x):
    if ((x.a==0)&(x.b==0)):
        return 1;
    if ((x.a==0)&(x.b==1)):
        return 2;
    if ((x.a==1)&(x.b==0)):
        return 3;
    if ((x.a==1)&(x.b==1)):
        return 4;
    else:
        return 0

如果使用括号,则仍然可以使用(&F)

def test_func(x):
    if ((x.a==0)&(x.b==0)):
        return 1;
    if ((x.a==0)&(x.b==1)):
        return 2;
    if ((x.a==1)&(x.b==0)):
        return 3;
    if ((x.a==1)&(x.b==1)):
        return 4;
    else:
        return 0

你能添加一个可复制的例子吗?那只是你数据的简化或模拟版本。是的!我编辑了我的问题,你能添加一个可复制的例子吗?那只是你数据的简化或模拟版本。是的!我编辑了我的问题是的。。这就是问题所在:啊。。这就是问题所在:D