python之Pandas groupby nunique 输出到列表
bhlsheji
阅读:78
2024-07-26 13:47:55
评论:0
我有一个如下数据集作为输入:
labels = ['chrom', 'start', 'end', 'read']
my_data = [['chr1', 784344, 800125, 'read1'],
['chr1', 784344, 800124, 'read2'],
['chr1', 784344, 800124, 'read3']]
我使用以下方法将其转换为 pandas 数据框:
my_data_pd = pd.DataFrame.from_records(my_data, columns=labels)
看起来像这样:
chrom start end read
0 chr1 784344 800125 read1
1 chr1 784344 800124 read2
2 chr1 784344 800124 read3
我想要做的是以下内容:我不想合并具有相同 chrom、start、end 值的行,并计算 'read' 中值的不同出现次数 合并的行的列。最后,我想将该输出转换为列表/元组,如本例所示(注意最后一列包含计数信息):
[('chr1', 784344, 800125,1), ('chr1', 784344, 800124,2)]
我能做到的:
使用以下命令取消 Pandas Groupby 和 nunique():
my_data_pd.groupby(['chrom','start','end'],sort=False).read.nunique()
我到达了一个看起来像我想要的东西的 Pandas.Series 对象:
chrom start end
chr1 784344 800125 1
800124 2
Name: read, dtype: int64
但是,当我使用以下方法将其转换为列表/元组时:
sortedd.index.tolist()
最后一列被排除,导致输出结果:
[('chr1', 784344, 800125), ('chr1', 784344, 800124)]
知道如何解决这个问题吗?
对于所有可能想出解决方案的人,我在一个大程序中这样做了数千次,所以速度是一个大问题。这就是我避免使用 BedTools 和 pybedtools
等其他工具的原因谢谢!
请您参考如下方法:
第一个 reset_index
然后在 list comprehension
中转换为 tuples
:
L = [tuple(x) for x in sortedd.reset_index().values.tolist()]
print (L)
[('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。