带pd切割的Pandas群比

2024-05-14 09:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧 enter image description here

chr列表示染色体数目,pos表示染色体中的特定位置。pos列按升序排序。我需要将每一条染色体分成100、1000、10000等相等的单元。例如,对于单元值100,chr 1将被分成单元[01100],[100200],…[最后位置最后位置+100)

因此(可能)我需要首先chr列对u进行分组,然后在pos列上使用pd.cut,其中的仓位由组中的maxpos确定。我如何做到这一点

我只能找到带有固定垃圾箱的示例,例如

pd.groupby(['chr', pd.cut(df_sorted.pos, bins=100)])

但在我的例子中,我需要通过组maxpos值来确定最后的bin间隔

我试过这个:

chr_group = df_sorted.groupby(['chr'])

chr_group.apply(lambda grp: pd.cut(grp.pos, bins=pd.interval_range(
    start=0, freq=1000, end=grp.pos.max(), closed='left')))

但这给了我错误 ValueError: Cannot convert non-finite values (NA or inf) to integer

注意:数据集几乎有300万行,不能使用循环


Tags: 数据posdfgroup单元pdsortedgroupby
1条回答
网友
1楼 · 发布于 2024-05-14 09:04:36

耶,我终于成功了。我需要做的是扩展bin间隔边界。该错误是由bin间隔未覆盖的最后一行引起的

hr_group = df_sorted.groupby(['chr'])
chr_group.apply(lambda grp: pd.cut(grp.pos, bins=pd.interval_range(
    start=0, freq=1000, end=grp.pos.max()+1000, closed='left')))

相关问题 更多 >

    热门问题