pandas groupby返回两组相同的唯一ID

时间:2018-05-27 13:03:50

标签: python pandas group-by pandas-groupby

我有一个大型的pandas数据框,我按操作运行组。

CHROM    POS    Data01    Data02 ......
1        ....................
1        ...................
2        ..................
2        ............
scaf_9   .............
scaf_9   ............

所以,我正在做:

 my_data_grouped = my_data.groupby('CHROM')

 for chr_, data in my_data_grouped:
      do something in chr_
      write something from that chr_ data

小数据和没有字符串类型CHROMscaff_9的数据中的一切都很好。但是,对于非常大的数据和scaff_9,我得到两组2。它实际上不是错误消息,它不会影响计算。问题是我在文件中按组写数据;我得到两组2(分裂不均等)。

我很难追溯到这个问题的根源,因为没有错误信息,而且数据量很小,它运行良好。 我唯一的假设是:

  • pandas模块可以处理的总数据帧与分组数据帧中的行数有一定的限制。这个问题的解决方法是什么?
  • 在所有2中,大多数被视为整数对象,而一些(后来的部分)被视为接近scaff_9的字符串对象。这可能吗?

抱歉,我只是在这里做出我的假设,而且我不可能知道问题的根源。

发布编辑: 在尝试sort_by(['CHROM'])之前,我还试图运行groupby,但问题仍然存在。

对问题的任何可能的解决方法。

谢谢,

1 个答案:

答案 0 :(得分:1)

在我看来存在数据问题,显然有一些空白,所以大熊猫分别处理每个组。

解决方案应首先删除traling空格:

df.index = df.index.astype(str).str.strip()

您还可以检查index的唯一字符串值:

a = df.index[df.index.map(type) == str].unique().tolist()

如果第一列不是索引:

df['CHROM'] = df['CHROM'].astype(str).str.strip()

a = df.loc[df['CHROM'].map(type) == str, 'CHROM'].unique().tolist()

编辑:

最后的最终解决方案更简单 - 转换为str,如:

df['CHROM'] = df['CHROM'].astype(str)