gpt4 book ai didi

python - 检查一系列数字是否位于 pandas 数据框中的两列之间

转载 作者:行者123 更新时间:2023-12-02 18:19:31 25 4
gpt4 key购买 nike

我正在尝试对基因组位置进行分类,并且我有如下所示的 DataFrame,其中包含所有位置及其各自的分类类型。 Type列没有唯一的分类,但每行将有 Chr 的唯一组合, Low , High .

pd.DataFrame({
'Chr':[1,1,3],
'Low':[100,200,300],
'High':[150,250,350],
'Type':['Foo','Bar','Foo']
})

然后我有了需要像下面的 DataFrame 一样进行分类的样本集。

pd.DataFrame({
'Chr':[1,1,5],
'Loc':[125,325,325]
})

为了对数据进行分类,对于样本集中的每个位置,在 Chr 中找到的染色体位置列必须匹配 Chr在引用 DataFrame 和 Loc 中找到的值值必须是 >= Low值和<= High值(value)。如果发生这种情况,则该行应标有相应的 Type在引用数据框中。在我提供的示例中,样本集应按如下所示进行标记。

pd.DataFrame({
'Chr':[1,1,5],
'Loc':[125,325,325],
'Type':['Foo','None','None']
})

看起来像:

   Chr  Loc  Type
0 1 125 Foo
1 1 325 None
2 5 325 None

最佳答案

您可以在“Chr”上合并两者。然后在合并的 DataFrame 上,查看“Loc”是否介于“Low”和“High”之间,如果不是,则使用 where 用 NaN 值填充“Type”。最后,删除不相关的列和重复的行:

merged = sample.merge(df, on='Chr', how='left')
merged['Type'] = merged['Type'].where(merged['Loc'].between(merged['Low'], merged['High']))
out = merged.drop(columns=['Low','High']).drop_duplicates(subset=['Chr','Loc'])

输出:

   Chr  Loc Type
0 1 125 Foo
2 1 325 NaN
4 5 325 NaN

关于python - 检查一系列数字是否位于 pandas 数据框中的两列之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71058013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com