【发布时间】:2016-04-13 22:48:25
【问题描述】:
我有一个包含 gene_name、sample_name、value 和 e_id 列的数据框。我想创建一个数据框,其中只包含gene_name 中所有sample_name 的中位数value 高于阈值的行。
例如如果我有以下数据框:
e_id gene_name sample_name value
1 gene1 sample1 10
2 gene1 sample1 21
3 gene1 sample1 31
4 gene2 sample1 40
5 gene2 sample1 50
6 gene2 sample1 60
2 gene1 sample2 11
3 gene1 sample2 22
1 gene1 sample2 32
5 gene2 sample2 41
6 gene2 sample2 51
4 gene2 sample2 61
3 gene1 sample3 12
1 gene1 sample3 23
2 gene1 sample3 33
6 gene2 sample3 42
4 gene2 sample3 52
5 gene2 sample3 62
1 gene1 sample4 13
2 gene1 sample4 24
3 gene1 sample4 34
4 gene2 sample4 43
5 gene2 sample4 53
6 gene2 sample4 63
中位数在哪里:
gene_name sample_name
gene1 sample1 21
sample2 22
sample3 23
sample4 24
gene2 sample1 50
sample2 51
sample3 52
sample4 53
阈值 22 应生成仅包含带有 gene2 的条目的数据帧,因为并非gene1 中的所有样本的中位数都高于 22。结果应如下所示:
e_id gene_name sample_name value
4 gene2 sample1 40
5 gene2 sample1 50
6 gene2 sample1 60
5 gene2 sample2 41
6 gene2 sample2 51
4 gene2 sample2 61
6 gene2 sample3 42
4 gene2 sample3 52
5 gene2 sample3 62
4 gene2 sample4 43
5 gene2 sample4 53
6 gene2 sample4 63
我使用groupby 找到了中位数:
df.groupby(["gene_name", "sample_name"])["value"].median()
但我无法从这里继续。谢谢!
编辑:澄清一下,基因中的所有样本的值都必须超过阈值
【问题讨论】:
-
试试这个
df1 = df.groupby(['gene_name','sample_name']).median().reset_index()然后df1[df1.value > 22],如果这会得到你想要的结果,请告诉我。 -
@Abbas,这仍然不考虑基因中的所有样本都高于阈值,但这是一个开始,谢谢