Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如何选择具有公共字符串值的行,并查找和、除每个元素?_Python_Pandas_Dataframe - Fatal编程技术网

python:如何选择具有公共字符串值的行,并查找和、除每个元素?

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

我有一个名为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        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