【问题标题】:Pandas groupby nunique output to listPandas groupby nunique 输出到列表
【发布时间】:2018-01-31 15:18:27
【问题描述】:

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

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 Groupbynunique()

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

等其他工具的原因

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先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)]
    

    【讨论】:

    • 这很简单 :)
    • 我在想用这种方式..对于元组很好(PS:我忘记如何获取元组..)
    • @Dark - 不要忘记也支持问题,我认为这很好;)
    • @Wen- 并且不要忘记也支持问题,我认为这很好;)
    • 这似乎是最快的 :) 非常感谢大家的快速回答!
    【解决方案2】:

    你可以set_index

    sortedd.to_frame('val').set_index('val',append=True).index.tolist()
    Out[277]: [('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]
    

    【讨论】:

    • 我想知道追加的存在。这么多天今天才看到
    【解决方案3】:

    您可以使用多索引,即

    idx = pd.MultiIndex.from_arrays(sortedd.reset_index().values.T)
    
    idx.tolist()
    [('chr1', 784344, 800125, 1), ('chr1', 784344, 800124, 2)]
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 2020-05-21
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多