Python 3.x 基于字典值对数据帧进行过滤和迭代
我正在尝试迭代pandas数据帧以创建过滤条件,下面是我的代码,运行良好:-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"], ["
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-我认为对于一个元素元组,需要
,
是的,你说得对!!原因是“只有一个元素的元组。如果元组只包含一个元素,则它不被视为元组。它应该有一个尾随逗号,以指定解释器它是元组。”