首页 > 解决方案 > 使用 pandas 过滤功能后返回一个列表

问题描述

我是 Pandas 的新手,遇到了一些非常棘手的问题。

我想做的是按各个列中的 aa 值对样本进行分组,然后根据该列值运行 api 调用。

那部分已经完成。创建对象后,我想返回对象并将其存储到局部变量中,这证明了具有挑战性的部分。

这是我的 .CSV 文件中的数据集。

    Sample  Sample Type Tumor   Age Location
       1       Blood    Benign  43   LUNG
       2       FFPE     Benign  23   LUNG
       3       Blood    Benign  12  LUNG

我正在过滤血液或 FFPE 的样本类型,然后应用一个函数来创建样本

def create_samples(x):

    sample_objects = Sample.create({
        'count': x.shape[0],
        'type': x.iloc[0]['Sample Type']
    })

    return sample_objects

if __name__ == '__main__':

    df = pd.read_csv(path)
    blood_samples, ffpe_samples = df.groupby('Sample Type').filter(lambda x: create_samples(x))

因为有两个 SampleTypes,所以它对函数进行了两次迭代,我相信它首先创建 Blood Samples,然后再创建 FFPE Samples。

在两次创建对象时,我都想将这些对象分别返回给变量 blood_samples 和 variable_samples。有可能这样做吗?

我能想到的唯一技巧是分配一些我希望避免的全局变量。

想法?

标签: pandaspython-3.5

解决方案


你用groupby.filter错了。在groupby上下文中,filter接受一个返回布尔值的函数。结果是一个组合数据框,仅包含函数返回的组True

你想要的是这个

blood_samples, ffpe_samples = (create_samples(d) for _, d in df.groupby('Sample Type'))

这只有在恰好有两个唯一值时才有效df.Sample

将其保留为字典可能会更好

sample_dict = {n: create_samples(d) for n, d in df.groubpy('Sample')}

推荐阅读