我试图动态创建一个lambda函数字典,将其传递到Pandas中的agg()函数中,并计算“异常”的数量
def prepareAggDict(defDict):
aggdict={}
# iterate over features with upper limit threshold
for feature_a, threshold_a in defDict.items():
aggdict[feature_a] = lambda x: (x >= threshold_a).sum()
return(aggdict)
我希望通过以下方式传递具有不同阈值的不同字段名:
aggdict = prepareAggDict({"column_a":3500, "column_b":8200})
dailyAgg = df.groupby([id_col,Date_col]).agg(aggdict)
但出于某种原因,聚合只应用列_b的第二项,而不应用列_a的第一项。 我试着在prepareAggDict函数中将它们分成不同的lambda,它工作得很好。不幸的是,我必须为不同的列创建大约7个不同的阈值,我想通过将多个列名称及其阈值传递到一个方法来创建它,该方法将生成自定义聚合函数的字典,并通过agg()传递给groupby
例如:
data = {
"id_col":["A","A","B","B","B"],
"column_a":[500,4500,8100,300,11500],
"column_b":[800,22340,7554,300,900]
}
df = pd.DataFrame(data)
aggdict = prepareAggDict({"column_a":3500, "column_b":8200})
dailyAgg = df.groupby(["id_col"]).agg(aggdict)
我希望a组中的列_a的值为1,B的值为2
使用lambda函数来匹配
dict
中的dict.get
,如果没有返回匹配项或缺少值:编辑:我认为在您的解决方案中,对于组值,不传递
x
,以下是使用nested functions的可能解决方案:相关问题 更多 >
编程相关推荐