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

问题描述 投票:0回答:1

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

df:
indicator, value, a, b
1, 20, 5, 3
0, 30, 6, 8
0, 70, 2, 2
1, 10, 3, 7

我想基于指标添加一个新列(value_new)。如果为indicator == 1,则为value_new = a*b,否则为value_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

Error: 'Length of values does not match length of index'

而且我也尝试过:

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_new'

python pandas for-loop if-statement
1个回答
1
投票

您可以使用np.where

np.where

打印:

df['value_new'] = np.where(df['indicator'], df['a']*df['b'], df['value'])
print(df)
© www.soinside.com 2019 - 2024. All rights reserved.