【发布时间】:2021-07-16 12:57:43
【问题描述】:
chr 列用于染色体编号,pos 用于其中的特定位置。 pos 列按升序排列。我需要将每个染色体分成相等的 100、1000、10000 等箱。例如对于 bin 值 100 chr 1 将被拆分为 bin [0, 100), [100, 200), ... [last position, last position+100)。
所以(可能)我需要先 group_by chr 列,然后在 pos 上使用 pd.cut > 由组中最大 pos 确定的 bin 列。我该怎么做?
我只能找到带有 set bins 的示例,例如
pd.groupby(['chr', pd.cut(df_sorted.pos, bins=100)])
但在我的情况下,我需要通过组最大 pos 值确定最后一个 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
注意:数据集将近3m行,不能使用循环
【问题讨论】:
-
注意:
adding df_sorted.fillna(0, inplace=True)没有帮助 -
也许在 lambda 函数的末尾添加
.fillna(0)会有所帮助? -
你的意思是
chr_group.apply(lambda grp: pd.cut(grp.pos, bins=pd.interval_range(start=0, freq=1000, end=grp.pos.max(), closed='left'))).fillna(0)或chr_group.apply(lambda grp: pd.cut(grp.pos, bins=pd.interval_range(start=0, freq=1000, end=grp.pos.max(), closed='left')).fillna(0))? -
第二个。但是,如果您添加数据框的文本版本而不是图片也可以。
-
这样做会得到
ValueError: Cannot setitem on a Categorical with a new category, set the categories first
标签: python pandas dataframe data-science