我正在使用pandas处理一个中等大小的数据集,大约有600,000行。
它有三个“id”变量:“gene_id”,“gene_name”和“transcript_id”,然后是一些在运行时确定的数字列。
In [129]: df.head().todict()
{u'utr3_count': {8: 2.0, 30: 1.0, 29: 2.0, 6: 2.0, 7: 2.0},
u'gene_id': {8: u'ENSG00000188157', 30: u'ENSG00000160087', 29: u'ENSG00000176022', 6: u'ENSG00000188157', 7: u'ENSG00000188157'},
u'utr3_enrichment': {8: 2.1449912126499999, 30: 1.14988290398, 29: 1.0484234234200001, 6: 2.1449912126499999, 7: 2.1449912126499999},
u'transcript_id': {8: u'ENST00000379370', 30: u'ENST00000450390', 29: u'ENST00000379198', 6: u'ENST00000379370', 7: u'ENST00000379370'},
u'expression': {8: 0.13387876534027521, 30: 0.514855687606112, 29: 0.79126387397064091, 6: 0.13387876534027521, 7: 0.13387876534027521},
u'gene_name': {8: u'AGRN', 30: u'UBE2J2', 29: u'B3GALT6', 6: u'AGRN', 7: u'AGRN'}}
我希望能够针对每个“transcript_id”获取复制品的平均值。但是,仅通过“transcript_id”进行分组处理意味着我会失去“gene_id”和“gene_name”的信息,因为它们被归类为无用的列。
如果我在三个列上进行分组,那么我将立即遇到MemoryError错误,即使在大型计算机(128GB)上也是如此,因为pandas尝试对三个列中的每个值的组合进行计算,尽管这绝对不是必要的:每个“transcript_id”映射到一个“gene_id”和一个“gene_name”。
有没有一种方法只对“transcript_id”进行分组处理,而不会失去其他列中的信息?