所以说我有一些数据如下:

patient_id  lab_type  value
1           food       10
1           food       8
2           food       3
2           food       5
1           shot       4
1           shot       10
2           shot       2
2           shot       4


然后,我将诸如groupby(['patient_id', 'lab_type'])

之后,我想在value上汇总,但每个lab_type都不同。在food上,我想使用mean进行汇总;在shot上,我想使用sum进行汇总。

最终数据应如下所示:

  patient_id  lab_type  value
  1           food       9 (10 + 8 / 2)
  2           food       4 (3 + 5 / 2)
  1           shot       14 (10 + 4)
  2           shot       6 (2 + 4)

最佳答案

对于食物,我想使用均值进行汇总,而在出手时,我希望使用总和进行汇总。


只需使用.apply并传递自定义函数即可:

def calc(g):
    if g.iloc[0].lab_type == 'shot':
        return sum(g.value)
    else:
        return np.mean(g.value)
result = df.groupby(['patient_id', 'lab_type']).apply(calc)


在这里calc接收每个组的数据帧,如Panda's split-apply-combine中所示。结果,您得到了想要的东西:

patient_id  lab_type
1           food         9
            shot        14
2           food         4
            shot         6
dtype: float64

关于python - Pandas :根据组的不同汇总,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34981042/

10-12 23:49