使用 pandas 中的参数应用多个 lambda 函数
apply multiple lambda functions with parameter in pandas
我在 pandas DataFrame 中找到某些值高于某些截止值的索引。到目前为止,我已经使用一系列 lambda 函数实现了这一点。
data.apply([lambda v:v[v>=0.25].idxmin(),
lambda v:v[v>=0.25].idxmin(),
lambda v:v[v>=0.50].idxmin(),
lambda v:v[v>=0.75].idxmin(),
lambda v:v[v>=0.90].idxmin()])
我试图将 lambda 函数参数化为任意截止值列表。但是,如果我使用以下内容,则结果不正确,因为所有 lambda 函数都具有相同的名称,并且基本上只有最后一个出现在 apply 返回的数据框中。
如何正确参数化这些 lambda?
cutoff_values=[25,50,100]
agg_list=[lambda v,c:v[v>=(float(c)/100.0)].idxmin() for c in cutoff_values]
data.apply(agg_list)
Pythonic-pandas更好的方法是什么?
对我来说,嵌套的 lambda 函数如下:
q = lambda c: lambda x: x[x>=c].idxmin()
cutoff_values=[25,50,90]
print (data.apply([q((float(c)/100.0)) for c in cutoff_values]))
你可以使用这个:
df = pd.DataFrame(data={'col':[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]})
df = df[['col']].apply(lambda x: [x[x >= (float(c) / 100.0)].idxmin() for c in cutoff_values])
我在 pandas DataFrame 中找到某些值高于某些截止值的索引。到目前为止,我已经使用一系列 lambda 函数实现了这一点。
data.apply([lambda v:v[v>=0.25].idxmin(),
lambda v:v[v>=0.25].idxmin(),
lambda v:v[v>=0.50].idxmin(),
lambda v:v[v>=0.75].idxmin(),
lambda v:v[v>=0.90].idxmin()])
我试图将 lambda 函数参数化为任意截止值列表。但是,如果我使用以下内容,则结果不正确,因为所有 lambda 函数都具有相同的名称,并且基本上只有最后一个出现在 apply 返回的数据框中。 如何正确参数化这些 lambda?
cutoff_values=[25,50,100]
agg_list=[lambda v,c:v[v>=(float(c)/100.0)].idxmin() for c in cutoff_values]
data.apply(agg_list)
Pythonic-pandas更好的方法是什么?
对我来说,嵌套的 lambda 函数如下:
q = lambda c: lambda x: x[x>=c].idxmin()
cutoff_values=[25,50,90]
print (data.apply([q((float(c)/100.0)) for c in cutoff_values]))
你可以使用这个:
df = pd.DataFrame(data={'col':[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]})
df = df[['col']].apply(lambda x: [x[x >= (float(c) / 100.0)].idxmin() for c in cutoff_values])