在迭代DataFrame的行时,如何根据同一行中另一个元素的值更改一个元素的值?
我有以下代码:
for index, row in df.iterrows():
if (row["A"] in mult):
row["B"] = row["B"] * mult[row["A"]]
这将遍历每一行,并查看“A”中的值是否出现在字典中的键中(mult
)。如果它在字典中,则系列“B”乘以来自字典的浮点值。
代码运行时没有报告错误 - 但是当我检查df时,它在DataFrame中没有改变。
谢谢 - 史蒂夫
答案 0 :(得分:3)
首先,您正在尝试重新初始化本地变量row
。
正确的代码如下:
for index,row in df.iterrows():
if row["A"] in mult:
df["B"].iloc[index] = row["B"] * mult[row["A"]]
然而,这是处理中型或大型DataFrame的一种丑陋方式。 pythonic解决方案可能如下:
df["B"] = df.apply(lambda x: x["B"] * mult[x["A"]] if x["A"] in mult else x["B"], axis=1)