Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用for循环有条件地填充新列?_Python_Pandas_For Loop_If Statement - Fatal编程技术网

如何在python中使用for循环有条件地填充新列?

如何在python中使用for循环有条件地填充新列?,python,pandas,for-loop,if-statement,Python,Pandas,For Loop,If Statement,我想添加一个新列并根据条件填充值 df: indicator, value, a, b 1, 20, 5, 3 0, 30, 6, 8 0, 70, 2, 2 1, 10, 3, 7 我想根据指示符添加一个新列(value\u new)。如果indicator==1,value\u new=a*b否则value\u new=value df: indicator, value, a, b, value_new 1, 20, 5, 3, 15 0, 30, 6, 8, 30 0, 70, 2,

我想添加一个新列并根据条件填充值

df:
indicator, value, a, b
1, 20, 5, 3
0, 30, 6, 8
0, 70, 2, 2
1, 10, 3, 7
我想根据指示符添加一个新列(
value\u new
)。如果
indicator==1
value\u new=a*b
否则
value\u new=value

df:
indicator, value, a, b, value_new
1, 20, 5, 3, 15
0, 30, 6, 8, 30
0, 70, 2, 2, 70
1, 10, 3, 7, 21
我尝试过以下方法:

value_new = []
for in in range(1, len(df)):
  if indicator[i] == 1:
    value_new.append(df['a'][i]*df['b'][i])
  else:
    value_new.append(df['value'][i])
df['value_new'] = value_new
错误:“值的长度与索引的长度不匹配”

我也尝试过:

for in in range(1, len(df)):
  if indicator[i] == 1:
    df['value_new'][i] = df['a'][i]*df['b'][i]
  else:
    df['value_new'][i] = df['value'][i]
KeyError:'value\u new'
您可以使用:

印刷品:

   indicator  value  a  b  value_new
0          1     20  5  3         15
1          0     30  6  8         30
2          0     70  2  2         70
3          1     10  3  7         21

rows=len(df)表示i在范围(rows)内:你能用这个来保持前面的代码吗?如果
指示符
也是除1以外的任何正整数,那么这不就是乘法吗?最好编写完整条件
df['indicator']==1
   indicator  value  a  b  value_new
0          1     20  5  3         15
1          0     30  6  8         30
2          0     70  2  2         70
3          1     10  3  7         21