迭代Pandas DataFrame的行 - 根据另一个系列中的值更改系列值?

时间:2015-11-03 19:15:41

标签: python pandas dataframe

在迭代DataFrame的行时,如何根据同一行中另一个元素的值更改一个元素的值?

我有以下代码:

for index, row in df.iterrows():
    if (row["A"] in mult):
        row["B"] = row["B"] * mult[row["A"]]

这将遍历每一行,并查看“A”中的值是否出现在字典中的键中(mult)。如果它在字典中,则系列“B”乘以来自字典的浮点值。

代码运行时没有报告错误 - 但是当我检查df时,它在DataFrame中没有改变。

谢谢 - 史蒂夫

1 个答案:

答案 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)