给定这样的数据框,
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
答案 0 :(得分:10)
我使用groupby
和transform
执行以下操作:
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