【发布时间】:2021-09-22 21:16:27
【问题描述】:
我正在尝试根据以下数据框中一列“数字”中的条件替换“Alloc1”和“Alloc2”列中的值。
data = {'ID': ['001', '002', '003', '004'], 'Number': [99, 99, 20, 40], 'Alloc1': [np.NaN, np.NaN, np.NaN, np.NaN], 'Alloc2': [np.NaN, np.NaN, np.NaN, np.NaN]}
# Create DataFrame.
df = pd.DataFrame(data)
我根据条件插入值的代码如下:-
for numbers in df["Number"]:
if (numbers == 99):
df["Alloc1"] = 31
df["Alloc2"] = 3
else:
df["Alloc1"] = 0
df["Alloc2"] = numbers/2
上面似乎只执行了语句的 else 部分,并且“数字”列中的最后一个值不是 99。我该如何解决这个问题?一个功能会很棒。理想的输出应该是:-
final = {'ID': ['001', '002', '003', '004'], 'Number': [99, 99, 20, 40], 'Alloc1': [31, 31, 0, 0], 'Alloc2': [3, 3, 10, 20]}
# Create DataFrame.
final_df = pd.DataFrame(final)
【问题讨论】:
-
在您的预期输出中,
Alloc2是否应该具有值3, 3, 10, 20而不是3, 3, 2, 2?逻辑暗示如果Number不是99,则设置Alloc2 = Number / 2 -
df["Alloc1"] = 31将整列分配给一个常量。您只需将某一行(数字来自的同一行)中的值分配给新值。然而,更好的方法是np.where。 -
感谢@PeterLeimbigler 的更正。已编辑。