Python 性能比较和列选择的矢量化
我试图矢量化一个循环,该循环基于另一个数据帧(df_覆盖)中的值替换数据帧(df)中的值。对于df_override中的每一行,我们在df中找到匹配的“name”列,并将其“Field”列替换为“new value”中指定的新值。如果name是整数,则有一个if语句与另一列匹配 我写了两个循环来实现这一点。但是,目标是尽可能提高性能。旧的循环速度较慢,因为它使用ItErrors,所以我转到了np循环。我希望将这个循环矢量化以进一步提高运行时间,但我不知道如何继续 旧循环(慢) 新回路(更快) 不起作用(由于比较,字段选择似乎没有按预期工作) 样本数据Python 性能比较和列选择的矢量化,python,pandas,performance,vectorization,Python,Pandas,Performance,Vectorization,我试图矢量化一个循环,该循环基于另一个数据帧(df_覆盖)中的值替换数据帧(df)中的值。对于df_override中的每一行,我们在df中找到匹配的“name”列,并将其“Field”列替换为“new value”中指定的新值。如果name是整数,则有一个if语句与另一列匹配 我写了两个循环来实现这一点。但是,目标是尽可能提高性能。旧的循环速度较慢,因为它使用ItErrors,所以我转到了np循环。我希望将这个循环矢量化以进一步提高运行时间,但我不知道如何继续 旧循环(慢) 新回路(更快) 不
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
它们也可以是df_override的name列中的颜色吗?它们也可以是df_override的name列中的颜色吗?
fields = df_override["Field"].values
names = df_override["name"].values
values = df_override["New Value"].values
for field, name, value in zip(fields, names, 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)
fields = df_override["Field"].values
names = df_override["name"].values
values = df_override["New Value"].values
#Trying without the if statement here
df[fields] = np.where(df["name"] == names, df[fields], values)
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