Python 3.x 基于字典值对数据帧进行过滤和迭代

Python 3.x 基于字典值对数据帧进行过滤和迭代,python-3.x,pandas,dataframe,data-cleaning,Python 3.x,Pandas,Dataframe,Data Cleaning,我正在尝试迭代pandas数据帧以创建过滤条件,下面是我的代码,运行良好:- categories_lst = [ ["BEER/ALE/ALCOHOLIC CIDER"], ["CIGARETTES", "CIGARS", "ELECTRONIC SMOKING DEVICES"], ["COLD CEREAL"], ["

我正在尝试迭代pandas数据帧以创建过滤条件,下面是我的代码,运行良好:-

categories_lst = [
        ["BEER/ALE/ALCOHOLIC CIDER"],
        ["CIGARETTES", "CIGARS", "ELECTRONIC SMOKING DEVICES"],
        ["COLD CEREAL"],
        ["YOGURT"],
    ]
    threshold_lst = [1, 0.25, 0.25, 0.25]
    i = 0
    for lst in categories_lst:
        # filtering category
        df_report = df_us_brand_report[df_us_brand_report["category"].isin(lst)]
        df_report = df_report[abs(df_report["change"]) >= threshold_lst[i]]
        print(lst)
        print(threshold_lst[i])
        i += 1
       # some other operations
然而,我想优化它,我尝试使用下面的代码,但失败了,因为列表是不可散列的

category_dict = {
        ["BEER/ALE/ALCOHOLIC CIDER"]: 1,
        ["CIGARETTES", "CIGARS", "ELECTRONIC SMOKING DEVICES"]: 0.25,
        ["COLD CEREAL"]: 0.25,
        ["YOGURT"]: 0.25,
    }
    for condition, value in category_dict:
        filter_condition = (df_us_brand_report["category"].isin(condition)) & (
            abs(df_us_brand_report["change"]) >= value
        )

        # some other operations
任何帮助都将不胜感激

数据样本: 使用元组:

category_dict = {
        ("BEER/ALE/ALCOHOLIC CIDER", ): 1,
        ("CIGARETTES", "CIGARS", "ELECTRONIC SMOKING DEVICES"): 0.25,
        ("COLD CEREAL", ): 0.25,
        ("YOGURT", ): 0.25,
    }

for condition, value in category_dict.items():
    filter_condition = (df_us_brand_report["category"].isin(list(condition))) & (
            abs(df_us_brand_report["change"]) >= value)

对于字典键,您必须使用元组、字符串或int等不可变对象。

Hi@jezrael,您能告诉我计算结果为空的原因吗?df_us_brand_report[df_us_brand_report[“category”].isin(list(condition))]我正在尝试-筛选条件=(df_us_brand_report[“category”].isin(list(condition))和(abs(df_us_brand_report[“change”])>值)df_us_brand_报告=df_us_brand_报告[筛选条件]返回emptyadded的原始qyes样本数据工作正常。我会努力找出失败的案例。@PrakharJhudele-我认为对于一个元素元组,需要
是的,你说得对!!原因是“只有一个元素的元组。如果元组只包含一个元素,则它不被视为元组。它应该有一个尾随逗号,以指定解释器它是元组。”