首页 > 解决方案 > 将函数应用于分组数据帧并将多个输出保存到数据帧中

问题描述

我有一个看起来像这样的数据框:

          X    Z  participantNum  obsScenario  startPos  targetPos
16000 -16.0 -5.0         6950203            2         2          3
16001 -16.0 -5.0         6950203            2         2          3
16002 -16.0 -5.0         6950203            2         2          3
16003 -16.0 -5.0         6950203            2         2          3
16004 -16.0 -5.0         6950203            2         2          3
16005 -16.0 -5.0         6950203            2         2          3
16006 -16.0 -5.0         6950203            2         2          3
16007 -16.0 -5.0         6950203            2         2          3
16008 -16.0 -5.0         6950203            2         2          3
16009 -16.0 -5.0         6950203            2         2          3

我正在尝试将函数应用于返回 3 个输出的“X”和“Z”列。我想将这些输出保存到数据框中。我需要将函数应用于分组数据框。

我尝试了几种方法,使用这样的方法:

def mean_confidence_interval(data, confidence=0.95):
    a = 1.0*np.array(data)
    n = len(a)
    m, se = np.mean(a), scipy.stats.sem(a)
    h = se * scp.stats.t._ppf((1+confidence)/2., n-1)
    return m, m+h, m-h

allDataF['mean_ci'] = allDataF.groupby(['obsScenario', 'startPos', 'targetPos'])['X', 'Z'].apply(mean_confidence_interval)

但我收到一个错误:TypeError:插入列的索引与框架索引不兼容

标签: pythonpandasdataframepandas-groupby

解决方案


您可以使用:

mean_ci = df.groupby(['obsScenario', 'startPos', 'targetPos'])['X'].apply(mean_confidence_interval)
df.join(mean_ci.rename('mean_ci'), 
        on = ['obsScenario', 'startPos', 'targetPos'])

与具有索引mean_ci的系列一样['obsScenario', 'startPos', 'targetPos'],您不能将值分配给索引为的orgin allDataF 16000 ~ 16009


推荐阅读