python:如何选择具有公共字符串值的行,并查找和、除每个元素?
我有一个名为Results3的数据框,看起来像:python:如何选择具有公共字符串值的行,并查找和、除每个元素?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个名为Results3的数据框,看起来像: Tag Exp. m/z Intensity a file1.xls 1000 10000 True file1.xls 1100 20000 True file1.xls 1200 30000 True file2.xls 2000 11000 True file2.xls 2100
Tag Exp. m/z Intensity a
file1.xls 1000 10000 True
file1.xls 1100 20000 True
file1.xls 1200 30000 True
file2.xls 2000 11000 True
file2.xls 2100 12000 True
file2.xls 2200 13000 True
file2.xls 2300 14000 True
file3.xls 3000 31000 True
file3.xls 3100 123 True
其中Tag=str,Exp.m/z&Intensity为64
我的目标是创建另一个名为norm_intensity的列,其中intensity中的每个元素除以每个标记的强度值之和,以规范化强度值。因此,例如,对于上面的表Exp.m/z 1000 file1.xls,标准强度为:10000/(10000+20000+30000)。file2.xls中的强度值将除以file2.xls组中强度值的总和
我试着通过以下方式找到总数:
groups_sum = results3.groupby(results3['Tag'])
Intensity_sum = groups_sum.agg({'Intensity':sum})
但我似乎不知道该怎么走。最终,我将通过以下方式对结果3进行分类:
bins = np.arange(900, 3000, 1)
groups = results3.groupby([np.digitize(results3['Exp. m/z'], bins), 'Tag'])
我希望在进行装箱之前,能得到这种格式的结果3:
Tag Exp. m/z Intensity Norm_Intensity
file1.xls 1000 10000 0.1666
file1.xls 1100 20000 0.3333
file1.xls 1200 30000 0.5
file2.xls 2000 11000 0.22
file2.xls 2100 12000 0.24
file2.xls 2200 13000 0.26
file2.xls 2300 14000 0.28
file3.xls 3000 31000 0.9960
file3.xls 3100 123 0.00395
让我们使用
groupby
、transform
和sum
:
Result3.assign(Norm_Intensity=Result3.groupby('Tag')['Intensity'].transform(lambda x: x/x.sum()))
输出:
Tag Exp. m/z Intensity a Norm_Intensity
0 file1.xls 1000 10000 True 0.166667
1 file1.xls 1100 20000 True 0.333333
2 file1.xls 1200 30000 True 0.500000
3 file2.xls 2000 11000 True 0.220000
4 file2.xls 2100 12000 True 0.240000
5 file2.xls 2200 13000 True 0.260000
6 file2.xls 2300 14000 True 0.280000
7 file3.xls 3000 31000 True 0.996048
8 file3.xls 3100 123 True 0.003952
让我们使用
groupby
、transform
和sum
:
Result3.assign(Norm_Intensity=Result3.groupby('Tag')['Intensity'].transform(lambda x: x/x.sum()))
输出:
Tag Exp. m/z Intensity a Norm_Intensity
0 file1.xls 1000 10000 True 0.166667
1 file1.xls 1100 20000 True 0.333333
2 file1.xls 1200 30000 True 0.500000
3 file2.xls 2000 11000 True 0.220000
4 file2.xls 2100 12000 True 0.240000
5 file2.xls 2200 13000 True 0.260000
6 file2.xls 2300 14000 True 0.280000
7 file3.xls 3000 31000 True 0.996048
8 file3.xls 3100 123 True 0.003952