我有这个 python 代码,试图根据品牌销售的产品类型和价格点找到品牌之间的相似之处。我遇到的一个问题是价格、销售额和产品数量与之前的列无关。我想要发生的是,一旦其中一列不匹配,就转到下一行,因为类别不同,我不想因为价格相同而给它额外的权重点/产品/销售数量。我将在原始 df 中创建 Brand_df 的品牌作为基线,因为从技术上讲,它应该具有最高分数。
这是我使用的代码。我尝试添加继续功能,但我认为它不起作用
def subproducts_weighted(brand, df):
brand_df = df.loc[df['BRAND'] == brand]
weights = {
'L1': 5.0,
'L2': 5.0,
'L3': 4.0,
'L4': 3.0,
'L5': 2.0,
'Price': 3.0,
'Sales': 5.0,
'Product_count': 3.0
}
allowed_percentage_difference = 0.1
max_possible_sum = sum(weights.values())
# Create a list to store DataFrames and concatenate them later
result_dfs = []
for _, brand_row in brand_df.iterrows():
for _, row in df.iterrows():
weighted_sum = 0
for column, weight in weights.items():
if column not in ['Price', 'Sales', 'Product_count']:
if row[column] != brand_row[column]:
continue
elif row[column] == "NA" and brand_row[column] == "NA":
weighted_sum
else:
weighted_sum += (row[column] == brand_row[column]) * weight
if column in ['Price', 'Sales', 'Product_count']:
product_value = float(brand_row[column])
allowed_range = (
product_value * (1 - allowed_percentage_difference),
product_value * (1 + allowed_percentage_difference)
)
weighted_sum += ((row[column] >= allowed_range[0]) & (row[column] <= allowed_range[1])) * weight
row_data = {'BRAND': row['BRAND'], 'weighted_sum': (weighted_sum / max_possible_sum) * 100}
result_dfs.append(pd.DataFrame([row_data]))
# Concatenate the list of DataFrames into the final result
result_df = pd.concat(result_dfs, ignore_index=True)
# Sort the result DataFrame
result_df = result_df.sort_values('weighted_sum', ascending=False)
return result_df
A
continue
只会跳过当前迭代,使用 break
则会退出列 for 循环并转到下一行。