使用熊猫过滤器功能后返回列表

时间:2018-08-27 21:01:37

标签: pandas python-3.5

我是Pandas的新手,并且遇到了一些非常困难的问题。

我想做的是将样本按相应列中的值分组,然后根据该列值运行api调用。

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

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

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

我正在过滤Blood或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。有可能这样做吗?

我唯一想到的办法是分配一些我希望避免的全局变量。

有什么想法?

1 个答案:

答案 0 :(得分:1)

您使用的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')}