在 Pandas 中是否有 R 组合 lapply(split(df, df$group), fun) 的替代品?

Is there an alternative in Pandas for the R combination lapply(split(df, df$group), fun)?

提问人:Vaiva Petrikaite 提问时间:8/12/2022 更新时间:8/13/2022 访问量:65

问:

我想跑步

regr = ElasticNetCV(l1_ratio=l1_ratios, alphas=alphas_list).fit(x_train, y_train) pd.DataFrame(regr.predict(x_test),columns=['y_pred'])

对于根据组值的不同子集的 pandas 数据帧。我想避免以下情况:

for groupid in df['group'].unique():
  code
  pd.concat(...., axis=1)

一个简单的 apply() 将为每个观察值运行该函数,这是低效的。R 允许通过将数据帧拆分为不同的子集来使用 lapply()。熊猫有替代品吗?

r 熊猫 子集 l申请

评论


答:

0赞 Michael Hodel 8/13/2022 #1

假设每个 , and 都是一个带有列 和 的数据帧,例如,您可以执行类似此类操作,将每个组的预测存储在字典中,并将组 ID 作为键。我怀疑分组,即代码的循环部分对运行时至关重要。x_trainy_trainx_testgroupl1_ratiosalphas_list

def fun(x_tr, y_tr, x_te):
    regr = ElasticNetCV(l1_ratio=l1_ratios, alphas=alphas_list).fit(x_tr, y_tr)
    pd.DataFrame(regr.predict(x_te), columns=['y_pred'])

res = {}
for groupid in df.groupby['group'].unique():
    res[groupid] = fun(
        x_train[x_train.group == groupid],
        y_train[y_train.group == groupid],
        x_test[x_test.group == groupid]
    )