我有以下数据帧:
datas = [['RAC1','CD0287',1.52,1.40,1.45,1.51], ['RAC1','CD0695',2.08,1.40,1.45,1.51], ['RAC1','ADN103-1',2.01,1.40,1.45,1.51], ['RAC3','CD0258',1.91,1.38,1.43,1.45], ['RAC3','ADN103-3',1.66,1.38,1.43,1.45], ['RAC8','CD0558',1.32,1.42,1.48,1.53], ['RAC8','ADN103-8',2.89,1.42,1.48,1.53]]
labels = ['Plate', 'Sample', 'LogRatio', 'm1', 'm2', 'm3']
df = pd.DataFrame(data = datas, columns=labels)
Plate Sample LogRatio m1 m2 m3
RAC1 CD0287 1.52 1.40 1.45 1.51
RAC1 CD0695 2.08 1.40 1.45 1.51
RAC1 ADN103-1 2.01 1.40 1.45 1.51
RAC3 CD0258 1.91 1.38 1.43 1.45
RAC3 ADN103-3 1.66 1.38 1.43 1.45
RAC8 CD0558 1.32 1.42 1.48 1.53
RAC8 ADN103-8 2.89 1.42 1.48 1.53
我想增加一个新的列来计算m1,m2,m3的平均M和ADN103的值对数比,但我不知道如何通过板加一个值。 我想要的是:
^{pr2}$例如,对于数据帧的第一行,计算结果是:
df['M'] = (1.40 + 1.45 + 1.51 + 2.01) / 4
Plate Sample LogRatio m1 m2 m3 M
RAC1 CD0287 1.52 1.40 1.45 1.51 1,5925
RAC1 CD0695 2.08 1.40 1.45 1.51
RAC1 ADN103-1 2.01 1.40 1.45 1.51
RAC3 CD0258 1.91 1.38 1.43 1.45
RAC3 ADN103-3 1.66 1.38 1.43 1.45
RAC8 CD0558 1.32 1.42 1.48 1.53
RAC8 ADN103-8 2.89 1.42 1.48 1.53
因为2.01是板RAC1上ADN103的对数比值。 我知道如何得到所有板的ADN103值:
expreg = "ADN103_RAC."
ADN103 = df[df['Sample'].str.contains(expreg, regex=True)]
logRatio_ADN103 = ADN103['Log Ratio']
我在一个新的列中尝试了一个转换,只选择了ADN103个值,但是我不能得到它们的LogRatio值,它只是返回一个布尔值
df['ADN103oftheplate'] = df.groupby('Plate')['Sample'].transform(lambda x: x.str.contains(expreg, regex=True))
我不知道是否清楚。我试了这么多方法,现在完全迷路了。在
谢谢你的帮助。在
思考一下不同专栏的性质是有帮助的。在本例中,“Plate”和“Sample”列看起来更像是索引信息。因此,首先我将“Plate”列转换为索引,以便更容易地分割数据帧:
然后,您可以循环“Plate”索引中的唯一值,并将适当的Log_值分配给该数据帧的新列。在
^{pr2}$然后把最后四列加起来除以四。在
这会产生:
相关问题 更多 >
编程相关推荐