我是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
答案 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)