我有下面的数组,它是一个样本、探针、探针值的列表,一个布尔值来描述它是否是一个控件(并不是所有的控件都会包含单词" control ")和探针的分子量。数组是使用熊猫导入并合并模板和示例导入列表的结果。示例数组:
array([('Sample1', 'Control1', 846, True, 130),
('Sample1', 'Control2', 527, True, 202),
('Sample1', 'Control3', 493, True, 274),
('Sample1', 'Control4', 426, True, 418),
('Sample1', 'Control4', 191, True, 490),
('Sample1', 'Probe1', 1647, False, 138),
('Sample1', 'Probe2', 1146, False, 170),
('Sample1', 'Probe3', 958, False, 210),
('Sample1', 'Probe4', 814, False, 242),
('Sample1', 'Probe5', 301, False, 282),
('Sample2', 'Control1', 1355, True, 130),
('Sample2', 'Control2', 785, True, 202),
('Sample2', 'Control3', 936, True, 274),
('Sample2', 'Control4', 748, True, 418),
('Sample2', 'Control4', 335, True, 490),
('Sample2', 'Probe1', 2532, False, 138),
('Sample2', 'Probe2', 1679, False, 170),
('Sample2', 'Probe3', 1488, False, 210),
('Sample2', 'Probe4', 1387, False, 242),
('Sample2', 'Probe5', 500, False, 282),
('Sample3', 'Control1', 1701, True, 130),
('Sample3', 'Control2', 936, True, 202),
('Sample3', 'Control3', 1048, True, 274),
('Sample3', 'Control4', 705, True, 418),
('Sample3', 'Control4', 308, True, 490),
('Sample3', 'Probe1', 2957, False, 138),
('Sample3', 'Probe2', 1994, False, 170),
('Sample3', 'Probe3', 1663, False, 210),
('Sample3', 'Probe4', 1300, False, 242),
('Sample3', 'Probe5', 545, False, 282)],
dtype=[('FILENAME', 'O'), ('Probe', 'O'), ('Value', '<i8'), ('QC', '?'), ('MW', '<i8')])此刻一切都在一起。每当我试图根据探测或布尔值迭代数组时,我都会得到包含所有样本的结果。
我希望为每个示例生成保存在变量中的独立的可迭代列表,例如:我可以获取示例1,计算标记为true的探测值的总和,将其存储在变量中,然后使用该数字进行操作。做这件事最好的方法是什么?
提前谢谢你
添加了更多信息:
理想情况下,我希望能够获取任何样本,对于该样本中的每个探针,能够单独返回该样本的值。
我希望能够获取探针值,并将其除以真探针的总和,为每个样本的每个探针创建一个比率。
发布于 2018-03-12 19:51:18
我希望为每个示例生成保存在变量中的独立的可迭代列表,例如:我可以获取示例1,计算标记为true的探测值的总和,将其存储在变量中,然后使用该数字进行操作。做这件事最好的方法是什么?
建议:与其一个一个地创建一个又一个的新变量,更可扩展的方法是将结果包含在某种数据结构中。
由于您已经在使用Pandas,正如您所指出的,您可能需要在这里考虑Pandas groupby功能。一个在FILENAME上分组并取Value之和的示例,其中QC为True:
>>> import pandas as pd
>>> data = pd.DataFrame(data)
>>> data[data.QC==1].groupby('FILENAME')['Value'].sum()
FILENAME
Sample1 2483
Sample2 4159
Sample3 4698
Name: Value, dtype: int64现在,如果您真的想要分配单独的变量,您可以用如下所示的方法来解压这些结果:
>>> s1, s2, s3 = data[data.QC==1].groupby('FILENAME')['Value'].sum()
>>> s1
2483
>>> s2
4159
>>> s3
4698
>>> s1, s2, s3
(2483, 4159, 4698)若要使所有探针与控制探针之和标准化:
>>> sums = data[data.QC==1].groupby('FILENAME', as_index=False)['Value'].sum()
>>> merged = data[data.QC==0].merge(sums, on='FILENAME', suffixes=('', '_sum'))
>>> merged['prop'] = merged['Value'] / merged['Value_sum']
>>> merged
FILENAME Probe Value QC MW Value_sum prop
0 Sample1 Probe1 1647 False 138 2483 0.6633
1 Sample1 Probe2 1146 False 170 2483 0.4615
2 Sample1 Probe3 958 False 210 2483 0.3858
3 Sample1 Probe4 814 False 242 2483 0.3278
4 Sample1 Probe5 301 False 282 2483 0.1212
5 Sample2 Probe1 2532 False 138 4159 0.6088
6 Sample2 Probe2 1679 False 170 4159 0.4037
7 Sample2 Probe3 1488 False 210 4159 0.3578
8 Sample2 Probe4 1387 False 242 4159 0.3335
9 Sample2 Probe5 500 False 282 4159 0.1202
10 Sample3 Probe1 2957 False 138 4698 0.6294
11 Sample3 Probe2 1994 False 170 4698 0.4244
12 Sample3 Probe3 1663 False 210 4698 0.3540
13 Sample3 Probe4 1300 False 242 4698 0.2767
14 Sample3 Probe5 545 False 282 4698 0.1160发布于 2018-03-12 19:46:51
没有熊猫:
你有一组元组。python中的元组是例如mytuple = (1, 3, 1)。
若要访问元组中的元素,请使用:
mytuple[0] # for the first element若要在列表上阅读,请尝试:
tupleList =[(1,3,1), (2,6,2)]
for el in tupleList:
print(el[0]) # prints first element of all tuples in listhttps://stackoverflow.com/questions/49243295
复制相似问题