【发布时间】:2016-10-24 11:54:20
【问题描述】:
我有两个功能,我想将它们结合起来: 第一个名为 f(rdata, t) 的函数读取时间范围 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)
第二个函数 quantile(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 函数?
【问题讨论】:
-
quantile(f(rdata), t), q, n, ascending)实际上有什么问题?它完全符合您的要求:“读取时间范围 t 的数据,然后在第二步中应用分位数”。 -
我想在第一步中读取数据,然后可以为数据分配任何其他功能,例如对于平均值 f(data,t, mean(data))
-
如果你真的需要,那么
f(data, t, lambda x:quantile(x, q, n, ascending))和def f(rdata,t, fun): ... fun(rdata) -
@Carmen 我仍然无法理解这个问题——如果你想对数据应用另一个函数,那么只需用数据调用这个函数。也许您可以详细介绍一下您的具体用例,因为它对我来说确实像是一个 XY 问题。