2016-11-10 64 views
0

我的数据框这个样子的熊猫GROUPBY和中位数在新列

Plate Sample LogRatio 
P1  S1  0.42 
P1  S2  0.23 
P2  S3  0.41 
P3  S4  0.36 
P3  S5  0.18 

我已经计算出每块板的中位数正确的(但它可能不会像这样开头的最好的主意)

grouped = df.groupby("Plate") 
medianesPlate = grouped["LogRatio"].median() 

而且我想在我的数据帧

CorrectedLogRatio = LogRatio-median(plate) 

我想添加一列:

df["CorrectedLogRatio"] = LogRatio-median(plate) 

为有这样的事情:

Plate Sample LogRatio CorrectedLogRatio 
P1  S1  0.42 0.42-median(P1) 
P1  S2  0.23 0.23-median(P1) 
P2  S3  0.41 0.41-median(P2) 
P3  S4  0.36 0.36-median(P3) 
P3  S5  0.18 0.18-median(P3) 

但我不知道如何从medianesPlates中位数。 我尝试了一些应用和转换功能,但它不起作用。 感谢您的帮助

+0

究竟不工作,你得到了什么错误?你可能是想使用'CorrectedLogRatio = LogRatio-medianesPlate'? – sobek

回答

1

您可以使用transform

df['CorrectedLogRatio'] = df['LogRatio'] - df.groupby('Plate')['LogRatio'].transform('median') 

输出结果:

Plate Sample LogRatio CorrectedLogRatio 
0 P1  S1  0.42    0.095 
1 P1  S2  0.23    -0.095 
2 P2  S3  0.41    0.000 
3 P3  S4  0.36    0.090 
4 P3  S5  0.18    -0.090