簡體   English   中英

Python lambda:將函數賦給另一個函數

[英]Python lambda: Assign function to another function

我有兩個函數,我想要結合起來:第一個函數叫做f(rdata,t),讀取數據的時間horizo​​nt t並安排它進行進一步的建模

def f(rdata,t):
    dataset = pd.read_csv(rdata, sep = ",", skiprows = 3)
    data = dataset.loc[:,dataset.dtypes == np.float64] 
    data = pd.concat([dataset.OS_TERM, data], axis = 1).set_index(dataset.SIMULATION)
    rdata = data.loc[data["OS_TERM"] == t ].drop("OS_TERM", axis = 1).T.add_prefix("Sim_")
    return(rdata)

第二個函數分位數(data,q,n,ascending)計算假設的分位數q並將其與第一個函數的結果進行比較,顯示n個最極端的觀察值

def quantile(data, q , n , ascending):
    name =  str(q)
    quant = pd.DataFrame({name:data.quantile(q, axis = 1)})
    quant_dif = pd.DataFrame(data.values - quant.values, columns = data.columns)**2
    cum_dif = pd.DataFrame(quant_dif.sum(axis = 0), columns = ["cum_dif"])
    out = pd.DataFrame(cum_dif.sort(["cum_dif"], ascending = ascending).ix[0:n,:])
    index = out.index.values
    sims = pd.DataFrame(data.loc[:, index])
    return(sims)

結合這兩個我可以建立以下功能

quantile(f(rdata), t), q, n, ascending)

不過我想創建一個函數,它讀入時間范圍t的數據,然后在第二步中應用分位數

f(data, t, quantile(data, q, n, ascending))

有任何建議如何設置,可能與Lambda函數?

如果你堅持以最復雜的方式做事,你可以使用partial作為回調:

from functools import partial

def apply(rdata, t, callback):
    data = f(rdata, t)
    return callback(data=data)


apply(rdata, t, partial(qantile, q=q, n=n, ascending=ascending))

或者用lambda:

apply(
   rdata, t, 
   lambda data, q=q, n=n, asc=ascending: qantile(data, q, n, asc)
   )

但是在這兩種情況下,我都沒有看到它比簡單明了的解決方案有什么改進......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM