pandas groupby从apply操作中添加列

时间:2014-04-30 05:31:13

标签: python pandas

给定这样的数据框,

chrom   first_bp_intron last_bp_intron  unique_junction_reads
chr1    100 200 10
chr1    100 150 40
chr1    110 200 90

这是一种优雅的方式吗? groupby列上的first_bp_intron,并将unique_junction_reads中的值除以组的总和,以获得新列phi5。然后对于新列last_bp_intron的{​​{1}}也是如此:

phi3

我的缓慢,有效的解决方案是,

chrom   first_bp_intron last_bp_intron  unique_junction_reads   phi5    phi3
chr1    100 200 10  0.2 0.1
chr1    100 150 40  0.8 1.0
chr1    110 200 90  1.0 0.9

但我确信在熊猫中表达这种欲望会更优雅。

以下是我正在尝试做的完整ipython笔记本:http://nbviewer.ipython.org/11418657

1 个答案:

答案 0 :(得分:10)

我使用groupbytransform执行以下操作:

In [9]: by_first = df.groupby('first_bp_intron')
In [10]: df['phi5'] = by_first['unique_junction_reads'].transform(lambda x: x/x.sum())

In [11]: by_last = df.groupby('last_bp_intron')
In [12]: df['phi3'] = by_last['unique_junction_reads'].transform(lambda x: x/x.sum())

In [13]: df
Out[13]: 
  chrom  first_bp_intron  last_bp_intron  unique_junction_reads  phi5  phi3
0  chr1              100             200                     10   0.2   0.1
1  chr1              100             150                     40   0.8   1.0
2  chr1              110             200                     90   1.0   0.9