有条件地循环一个数据帧中的染色体和位置到另一数据帧中的染色体和间隔

2023-12-05

df1= pd.DataFrame({'Chr':['1', '1', '2', '2', '3','3','4'],
         'position':[50, 500, 1030, 2005 , 3575,50, 250]})
df2 = pd.DataFrame({'Chr':['1', '1', '1', '1',           
  '1','2','2','2','2','2','3','3','3','3','3'],
             'start':  
[0,100,1000,2000,3000,0,100,1000,2000,3000,0,100,1000,2000,3000],
             'end': 
 [100,1000,2000,3000,4000,100,1000,2000,3000,4000,100,1000,2000,3000,4000],
             'logr':[3, 4, 5, 6, 7,8,9,10,11,12,13,15,16,17,18],
             'seg':[0.2,0.5,0.2,0.1,0.5,0.5,0.2,0.2,0.1,0.2,0.1,0.5,0.5,0.9,0.3]})

我想有条件地循环 df1 中的“Chr”和“位置”到 df2 中的“Chr”和间隔(其中 df1 中的位置落在“开始”和“结束”之间),然后添加“logr”和“seg”列在 df1 中

我想要的输出是:

df3= pd.DataFrame({'Chr':['1', '1', '2', '2', '3','3','4'],
         'position':[50, 500, 1030, 2005 , 3575,50, 250],
           'logr':[3, 4, 10,11, 18,13, "NA"],
             'seg':[0.2,0.5,0.2,0.1,0.3,0.1,"NA"]})

先感谢您。


Use DataFrame.merge对所有组合使用外连接,然后按Series.between and boolean indexing with DataFrame.pop对于提取列和最后一个左连接以添加缺失的行:

df3 = df1.merge(df2, on='Chr', how='outer')
#between is by default inclusive (>=, <=) orwith parameter inclusive=False (>, <)
df3 = df3[df3['position'].between(df3.pop('start'), df3.pop('end'))]
#if need one inclusive and  another interval not (e.g. >, <=)
#df3 = df3[(df3['position'] > df3.pop('start')) & (df3['position'] <= df3.pop('end'))]
df3 = df1.merge(df3, how='left')
print (df3)
  Chr  position  logr  seg
0   1        50   3.0  0.2
1   1       500   4.0  0.5
2   2      1030  10.0  0.2
3   2      2005  11.0  0.1
4   3      3575  18.0  0.3
5   3        50  13.0  0.1
6   4       250   NaN  NaN

另一个解决方案:

df3 = df1.merge(df2, on='Chr', how='outer')
s = df3.pop('start')
e = df3.pop('end')
df3 = df3[df3['position'].between(s, e) | s.isna() | e.isna()]
#if different closed intervals
#df3 = df3[(df3['position'] > s) & (df3['position'] <= e) | s.isna() | e.isna()]
print (df3)
   Chr  position  logr  seg
0    1        50   3.0  0.2
6    1       500   4.0  0.5
12   2      1030  10.0  0.2
18   2      2005  11.0  0.1
24   3      3575  18.0  0.3
25   3        50  13.0  0.1
30   4       250   NaN  NaN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有条件地循环一个数据帧中的染色体和位置到另一数据帧中的染色体和间隔 的相关文章

随机推荐

  • 替换来自 stdin bash 的 Curl 请求中的 JSON 正文

    我正在尝试使用来自标准输入的输入填充卷曲请求正文中的一个变量 echo 123 curl d query match number XPOST url com 不幸的是 没有被替换 我希望请求的正文与以下内容相匹配 query match
  • 使用 smtp 时 Hotmail SSL3 版本号错误

    我正在尝试使用 python 中的 hotmail smtp 服务器 但是 我的登录尝试出现了明显的 SSL3 版本号错误 如何更改我正在使用的版本以及如何调查此问题 gt gt s connect smtp live com 587 22
  • matplotlib 中的垂直线和水平线

    我不太明白为什么我无法在指定的限制内创建水平和垂直线 我想用这个框绑定数据 然而 双方似乎并没有遵守我的指示 为什么是这样 CREATING A BOUNDING BOX BOTTOM HORIZONTAL plt axhline y 4
  • Rails 中的求和与分组

    我有一个这样定义的表 Name Order Widget Count Bob 12311 6 Nancy 12555 8 BoB 87573 12 Nancy 12929 4 我想这样检索它们 Bob 18 Nancy 12 即 它们的小部
  • VB.Net(或 C#)2008 多线程导入

    我希望构建一个多线程文本导入工具 通常是 CSV 到 SQL Server 2005 并希望在 VB NET 中执行此操作 但我并不反对 C 我有 VS 2008 试用版 只是不知道从哪里开始 谁能指出我可以在哪里查看和使用源代码的方向VE
  • 将 T-SQL string_agg 转换为 LINQ C#

    我正在尝试将 T SQL 查询转换为 LINQ 我的查询 SELECT l Id s SystemSerial v LicenseVersion l CreatedDate STRING AGG sf Name as Features FR
  • 使用 jQuery 的日期选择器突出显示特定范围内的日期

    我需要突出显示开始日期和结束日期之间的日期 我应该能够指定这些日期 谁能帮我 您可以使用演出日之前活动 对于需要在日历中显示的每个日期都会调用它 它传入一个日期并返回一个数组 0 isSelectable 1 cssClass 2 Some
  • 根据点之间的距离排序?

    我有一个由 3 个点 A B 和 C 组成的向量 我想根据这些点之间的距离对该向量进行排序 假设最大距离是 B 和 C 之间的距离 而不是 C 和 A 之间的距离以及最后的 A 和 B 之间的距离 我怎样才能做到这一点 std sort v
  • 我的编辑按钮在下一页不起作用(仅在第一页起作用)

    我的编辑和删除查询仅适用于数据表的第一页 但不适用于第二页 我正在使用 ajax 和 jquery 我是新人 这是我在大学的项目 谢谢你帮助我 这是代码
  • 如何通过 ssh 将 echo 的输出重定向到文件

    我正在尝试通过 ssh 将变量的内容重定向到文件 喜欢 ssh MachineIP echo CM Config gt mName CM CONFIG where CM Config是我的主机中包含多行的局部变量 并且 mName CM C
  • 为什么我们必须重写 Java 中的 equals() 方法?

    我对我们覆盖的原因有些困惑 equals method 例如 Test test1 new Test 3 Test test2 new Test 3 The if comparison does the same thing that th
  • Windows 窗体应用程序错误与水晶报告

    我是Windows窗体应用程序的新手 这是我在办公室的第一次申请 我的办公室管理人员给了我源代码 但他们对此一无所知 我在 Visual Studio 12 64 位 上运行这些代码 一切都在运行 但水晶报表不起作用 抛出错误 错误是 无法
  • 创建 WPF 自定义控件

    我目前正在使用 WPF 创建用户界面 并希望在我的窗口上显示饼图 据我所知 这将涉及创建自定义控件 在这种情况下 将样式或模板应用于现有控件就足够了 我读过几篇关于自定义控件的文章 所有提供详细描述的文章似乎都使用了非常不同的方法 不同的作
  • 如何解析此输出并分隔每个字段/单词

    这是阿克沙塔 我陷入了解析以下数据的困境 我想单独获取每个单词 我可以有一个示例代码以便我可以继续吗 RTRV HDR RH01 SIMULATOR 09 11 18 16 13 19 M RH01 COMPLD RTRV EQPT ALL
  • 进程死亡后如何使用接口在活动之间进行通信?

    我正在构建一个 SDK 需要在活动之间实现回调 但没有实际完成活动 我之前使用 onActivityResult 将结果提供给调用者活动 但是 这会关闭活动 我需要传递回调 无需完成 SDK 的活动 我当前的实现 fun initializ
  • WPF 自定义 ICommand 实现和 CanExecuteChanged 事件

    在我的 WPF UI 中 我使用通过以下代码在 xaml 中引用的 RoutedCommands Command viewModel MessageListViewModel DeleteMessagesCommand 我不喜欢这个到我的
  • CSS3PIE .htc 文件是否会为其他浏览器加载,即使它们不需要?

    我在用着CSS3Pie在使用无效 CSS 属性的 IE 中制作圆角 behavior url PIE htc 如果我将此声明保留在我的主 CSS 中 其他浏览器是否会加载此 htc 文件 即使它们不需要此文件 还是只有 IE 会加载此文件
  • Leaflet panTo(或setview)函数?

    我想创建一个 panTo 函数 当我单击链接时 地图会平移到坐标 但我不确定如何将值传递给函数 我首先为链接提供点场 pt 值 如下所示 a href class marker value Link a 然后我一直在尝试这个 dialog
  • 基于共同的第一个元素合并二维列表中的元素

    给出以下列表 lst 3 5 3 10 3 15 3 102 5 21 5 23 5 50 我想获得以下内容 3 5 10 15 102 5 21 23 50 请注意 列表根据第一个元素的值按升序排序 做到这一点最有效的方法是什么 这就是我
  • 有条件地循环一个数据帧中的染色体和位置到另一数据帧中的染色体和间隔

    df1 pd DataFrame Chr 1 1 2 2 3 3 4 position 50 500 1030 2005 3575 50 250 df2 pd DataFrame Chr 1 1 1 1 1 2 2 2 2 2 3 3 3