gpt4 book ai didi

python - Pandas:创建行数据框,其中 groupby 对象列的中位数高于阈值

转载 作者:行者123 更新时间:2023-12-01 04:00:44 24 4
gpt4 key购买 nike

我有一个包含列 gene_namesample_namevaluee_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()

但我无法从这里继续。谢谢!

编辑:为了澄清,基因中的所有样本的值都必须超过阈值

最佳答案

cond 为 bool 数据框,显示哪些中位数高于阈值:

cond = df.groupby(["gene_name", "sample_name"])["value"].median() >= 22

我们可以再次groupby来找出哪些基因的所有中位数都高于阈值:

cond.groupby(level=0).all()

输出:

gene_name
gene1 False
gene2 True
dtype: bool

您可以使用它来过滤原始数据帧。第一步是提取满足条件的基因名称列表。可以有更优雅的方法,但我使用了这个:

s = cond.groupby(level=0).all()
gene_list = s[s.values].index.tolist()

现在可以轻松过滤原始数据帧:

df[df.gene_name.isin(gene_list)]

关于python - Pandas:创建行数据框,其中 groupby 对象列的中位数高于阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com