【问题标题】:Apply function to grouped dataframe and save multiple outputs into the dataframe将函数应用于分组数据帧并将多个输出保存到数据帧中
【发布时间】:2021-02-05 02:34:27
【问题描述】:

我有一个如下所示的数据框:

          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: 插入列的索引与框架索引不兼容

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    你可以使用:

    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'] 的Series,因此您不能将值分配给索引为16000 ~ 16009 的orgin allDataF。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      相关资源
      最近更新 更多