我有以下数组,它是探针的样本,探针,值的列表,描述其控件(不是所有控件都包含单词" control")和分子的布尔值探头的重量。该数组是使用pandas导入并合并模板和样本导入列表的结果。示例数组:
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的探测值的总和,将其存储在变量中稍后用这个号码做点什么。最好的方法是什么?
提前谢谢
添加更多信息:
理想情况下,我希望能够获取任何样本,并且对于该样本中的每个探针,只能返回该样本的值。
我希望能够获取探针值并将其除以True探针的总和,以便为每个样本的每个探针创建一个比率。
答案 0 :(得分:0)
我想生成保存在变量中的分离的可迭代列表 对于每个样本,例如:我可以取样1,计算总和 对于那些标记为true的探测值,将其存储在a中 变量并稍后使用该数字执行某些操作。会是什么 最好的方法吗?
建议:不是一个接一个地创建大量新变量,而是一种更具可扩展性的方法是将结果包含在某种类型的数据结构中。
由于您已经在使用Pandas,如您所示,您可能需要在此处考虑Pandas groupby
功能。在FILENAME
上分组并将Value
与QC
之和取为真的示例:
>>> 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
答案 1 :(得分:-1)
没有熊猫:
你有一组元组。
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 list