Python 创建的新列的值不正确
我有两个列a和b,都是二进制变量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
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