Python Pandas groupby nunique输出到列表

Python Pandas groupby nunique输出到列表,python,pandas,Python,Pandas,我有如下数据集作为输入: labels = ['chrom', 'start', 'end', 'read'] my_data = [['chr1', 784344, 800125, 'read1'], ['chr1', 784344, 800124, 'read2'], ['chr1', 784344, 800124, 'read3']] 我使用以下方法将其转换为数据帧: my_data_pd = pd.DataFrame.from_rec

我有如下数据集作为输入:

labels = ['chrom', 'start', 'end', 'read']
my_data = [['chr1', 784344, 800125, 'read1'],
           ['chr1', 784344, 800124, 'read2'],
           ['chr1', 784344, 800124, 'read3']]    
我使用以下方法将其转换为数据帧:

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
我想做的是:我不想合并具有相同色度、起始值、结束值的行,也不想为合并的行计算'read'列中值的不连续出现次数。最后,我想将该输出转换为列表/元组,如本例所示(注意,最后一列包含计数信息):

我能做的是:

使用以下命令取消对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)]
你知道我该如何解决这个问题吗

对于所有可能提出解决方案的人来说,我在一个大程序中做了数千次,所以速度是一个大问题。这就是我避免使用其他工具的原因,比如BedToolspybedtools


谢谢

您可以
设置索引

sortedd.to_frame('val').set_index('val',append=True).index.tolist()
Out[277]: [('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]
首先,然后在
列表理解中
转换为
元组

L = [tuple(x) for x in sortedd.reset_index().values.tolist()]
print (L)
[('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]

您可以使用多索引,即

idx = pd.MultiIndex.from_arrays(sortedd.reset_index().values.T)

idx.tolist()
[('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]

这很简单:)我想用这种方式..对元组很好(PS:我忘了如何得到元组..@Dark-还有不要忘了向上投票的问题,我认为这很好;)@温-别忘了还有一个问题,我觉得很好;)这个似乎是最快的:)非常感谢大家的快速回答!我想知道他是否在场。过了这么多天,今天看到了吗
idx = pd.MultiIndex.from_arrays(sortedd.reset_index().values.T)

idx.tolist()
[('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]