我有一个名为df_override的数据框,其中包含“名称”,“字段”和“新值”列。此循环的目的是将df数据框的“字段”列中的所有“名称”匹配项替换为“新值”。 if语句用于查看它是否为整数,那么它将通过“ id”列进行匹配。
此循环工作正常,但数据帧较大时,它的运行速度令人难以置信。我还有其他几个for循环,它们在函数的后面都像这样运行。我想知道是否有其他方法可以执行针对运行时优化的功能?
谢谢。
for index, row in df_override.iterrows():
if(not str(row["name"]).isdigit()):
df.loc[df["name"] == row["name"], row["Field"]] = row["New Value"]
else:
df.loc[df["id"] == row["name"], row["Field"]] = row["New Value"]
df_override
"name" "Field" "New Value"
apple color red
100 is_number True
df
"name" "id" "color" "is_number"
apple 300 blue False
apple 200 yellow False
banana 100 green False
df (after processing)
"name" "id" "color" "is_number"
apple 300 red False
apple 200 red False
banana 100 green True
答案 0 :(得分:0)
将其更改为值而不是迭代可以提高性能,但仍然很慢。
新循环
for field, name, value in zip(df_override["Field"].values,df_override["name"].values,df_override["New Value"].values):
if not str(name).isdigit():
df[field] = np.where(df["name"] == name, df[field], value)
else:
df[field] = np.where(df["id"] == name, df[field], value)