给定一个数据帧,我想得到重复的索引,这些索引在列中没有重复的值,并查看哪些值不同。
具体来说,我有这个数据框:
import pandas as pd
wget https://www.dropbox.com/s/vmimze2g4lt4ud3/alt_exon_repeatmasker_intersect.bed
alt_exon_repeatmasker = pd.read_table('alt_exon_repeatmasker_intersect.bed', header=None, index_col=3)
In [74]: alt_exon_repeatmasker.index.is_unique
Out[74]: False
有些指数在第9栏有重复值(这个位置的DNA重复元素的类型),我想知道每个位置的重复元素的不同类型(每个指数=一个基因组位置)。
我想这需要一些groupby
忍者的帮助。
为了进一步简化,如果我们只有索引和repeat类型
genome_location1 MIR3
genome_location1 AluJb
genome_location2 Tigger1
genome_location3 AT_rich
因此,输出我希望看到所有重复索引及其重复类型,如下所示:
genome_location1 MIR3
genome_location1 AluJb
编辑:添加的玩具示例
我们为这种操作添加了
filter
方法。您也可以使用掩蔽和转换来获得等效的结果,但这样做速度更快,可读性也更高一些。重要:
0.12版引入了
filter
方法,但它无法处理索引不一致的数据帧/序列。这个问题——以及与系列中transform
相关的一个问题——已经在0.13版本中修复,该版本现在应该随时发布。显然,非均匀性指数是这个问题的核心,所以我应该指出,这种方法在熊猫0.13之前不会有帮助。与此同时,
transform
解决办法是一条路。请注意,如果在具有非均匀索引的序列上尝试此操作,它也将失败。没有理由不将
filter
和transform
应用于非均匀索引;它最初的实现很差。更快更好:
同样有用且非常简洁:
df[df.index.duplicated()]
注意,这只返回一个重复行,因此要查看所有重复行,您需要:
df[df.index.duplicated(keep=False)]
相关问题 更多 >
编程相关推荐