首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ndarray到可迭代列表/变量

从ndarray到可迭代列表/变量
EN

Stack Overflow用户
提问于 2018-03-12 19:43:31
回答 2查看 49关注 0票数 0

我有下面的数组,它是一个样本、探针、探针值的列表,一个布尔值来描述它是否是一个控件(并不是所有的控件都会包含单词" control ")和探针的分子量。数组是使用熊猫导入并合并模板和示例导入列表的结果。示例数组:

代码语言:javascript
复制
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的探测值的总和,将其存储在变量中,然后使用该数字进行操作。做这件事最好的方法是什么?

提前谢谢你

添加了更多信息:

理想情况下,我希望能够获取任何样本,对于该样本中的每个探针,能够单独返回该样本的值。

我希望能够获取探针值,并将其除以真探针的总和,为每个样本的每个探针创建一个比率。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-12 19:51:18

我希望为每个示例生成保存在变量中的独立的可迭代列表,例如:我可以获取示例1,计算标记为true的探测值的总和,将其存储在变量中,然后使用该数字进行操作。做这件事最好的方法是什么?

建议:与其一个一个地创建一个又一个的新变量,更可扩展的方法是将结果包含在某种数据结构中。

由于您已经在使用Pandas,正如您所指出的,您可能需要在这里考虑Pandas groupby功能。一个在FILENAME上分组并取Value之和的示例,其中QC为True:

代码语言:javascript
复制
>>> 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

现在,如果您真的想要分配单独的变量,您可以用如下所示的方法来解压这些结果:

代码语言:javascript
复制
>>> s1, s2, s3 = data[data.QC==1].groupby('FILENAME')['Value'].sum()

>>> s1
2483

>>> s2
4159

>>> s3
4698

>>> s1, s2, s3
(2483, 4159, 4698)

若要使所有探针与控制探针之和标准化:

代码语言:javascript
复制
>>> 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
票数 0
EN

Stack Overflow用户

发布于 2018-03-12 19:46:51

没有熊猫:

你有一组元组。python中的元组是例如mytuple = (1, 3, 1)

若要访问元组中的元素,请使用:

代码语言:javascript
复制
mytuple[0] # for the first element

若要在列表上阅读,请尝试:

代码语言:javascript
复制
tupleList =[(1,3,1), (2,6,2)]
for el in tupleList:
    print(el[0]) # prints first element of all tuples in list
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49243295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档