如果不满足要求,则尝试跳过循环中的列

问题描述 投票:0回答:1

我有这个 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
python pandas similarity
1个回答
0
投票

A

continue
只会跳过当前迭代,使用
break
则会退出列 for 循环并转到下一行。

© www.soinside.com 2019 - 2024. All rights reserved.