熊猫:np.where覆盖价值观

时间:2017-08-31 21:46:00

标签: python python-2.7 pandas

我目前多次遍历excel文件的行,并在行符合特定条件时以“XYZ”写入新列。

我目前的代码是:

 df["new_column"] = np.where(fn == True, "XYZ", "")

我面临的问题是,当fn == True条件不满足时,我想什么都不做,继续检查excel文件的下一行。我注意到每次迭代时,空字符串都会替换已在文件中标记的“XYZ”。有没有办法防止这种情况发生?有什么我可以做而不是空字符串(“”)来防止覆盖?

编辑:

我的数据框是一个包含多个列和行的巨大财务Excel文件。此数据集包含数量,收入,销售等列。基本上,我有一个包含大约50个条件的列表。对于每个条件,我遍历Excel中的所有行,对于符合条件的行,我想在标记该行的df [“new_column”]中放置一个“XYZ”。 df [“new_column”]是原始数据帧的添加列。然后,我进入下一个条件直到第50个条件。

我认为问题在于,当我继续检查列表中的其他条件时,我编写代码的方式用空字符串替换以前存在的“XYZ”。基本上,我想找到一种锁定“XYZ”的方法,因此它不会被覆盖。

fn是一个辅助函数,它返回一个布尔值,具体取决于条件是否等于数据帧中的一行。当我迭代时,如果条件匹配一行,则此函数返回True并用“XYZ”标记df [“new_column”]。辅助函数接受多个参数来检查当前条件是否与数据帧中的任何行匹配。我希望这个解释有所帮助!

2 个答案:

答案 0 :(得分:1)

你可以尝试使用lambda。

首先,创建函数:

def checkIfTrue(FN, new):
    if new == "":
        pass
    if FN:
        return "XYZ"

将其应用于新列:

df['new_column'] = df.apply(lambda row: checkIfTrue(row["fn"], row["new_column"]), axis=1)

答案 1 :(得分:0)

您想要使用.loc[]的IIUC:

df.loc[fn, "new_column"] = 'XYZ'