Python Pandas groupby行数据操作

时间:2018-01-17 16:06:41

标签: python pandas pandas-groupby

我是Python和熊猫的新手并且学习相同的东西。 我有关于groupby的pandas数据帧的基本问题。 我有一个数据框,我想要进行如下计算:

  SH    TH  QH  RH
  S1    B   10  5
  S2    B   12  8
  S1    B   5   8
  S1    S   5   10
  S1    S   3   12

我希望像这样的中间人:

  SH    TH  QH  RH
  S1    B   15  6
  S1    S   8   10.75
  S2    B   12  8

最终结果如下:

  SH    TH  QH  RH
  S1    B   7   6
  S2    B   12  8

我想知道如何以最好的方式在python pandas中做到这一点。

由于 NAND

1 个答案:

答案 0 :(得分:0)

this answer获取加权平均值。您可以通过这种方式获得中间结果:

wm = lambda x: np.average(x, weights=df.loc[x.index, "QH"])
df.groupby(['SH', 'TH'], as_index=False).agg({"QH":"sum", "RH":wm})

修改 要获得完整的结果

def nand_apply(f):
  tmp =  f.groupby('TH', as_index=False).agg({"QH":"sum", "RH":wm})

  if len(tmp)>1:
    tmp['QH']=tmp['QH'].transform(lambda x: x.diff(-1, ))

  return tmp.iloc[0]

df.groupby(['SH']).apply(nand_apply)

(注意,这严重依赖于在TH列中只有两个键值为B和S)