使用另一个不同长度的数据帧子集数据帧

亚当·奥尔塔

我有一个数据框,其中包含由染色体 (chr) 和位置 (pos) 表示的相互作用染色体对,如下所示:

>>>import pandas as pd

>>>df1
chr1     pos1     chr2     pos2
chr1    54278    chr13    68798
chr1    32145     chr7  1248798
... 
[162689366 rows x 4 columns]

在真实数据集中,这些按 chr1 排序,然后是 pos1、chr2、pos2。

我有另一个数据集,其中包含我希望以以下格式查看的交互对:

>>>df2
chr     start     stop     comment
chr1    54275    55080   cluster-1
chr1   515523   515634   cluster-2
...
chr13   68760    70760
...
[69 rows x 4 columns]

当且仅当两个交互对(chr1-pos1 和 chr2-pos2)都在 df2 的起始值和终止值范围内时,我希望对 df1 进行子集化以包含行。

在这个例子中,最终的数据帧看起来像这样:

>>>df3
chr1    pos1      chr2     pos2
chr1    54278    chr13    68798
...

我一直在尝试使用 pandas 中的 .between 函数明智地执行此步骤(对于第一个 chr-pos 对,然后是第二个),但没有成功。我在 python2.7 和 python3.6 中都试过。

>>>df3 = df1[(df1['chr1'].isin(df2.chr)) & df1['pos1'].between(df1.pos1(df2.start),df1.pos1(df2.stop))]

这似乎适用于 .isin 但我收到 .between 函数的错误。我认为是因为数据帧的长度不同,但我不能确定。

>>>df1['pos1'].between(df2.start,df2.stop)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/pandas/core/series.py", line 2412, in between
    lmask = self >= left
  File "/usr/lib/python2.7/dist-packages/pandas/core/ops.py", line 699, in wrapper
    raise ValueError('Series lengths must match to compare')
ValueError: Series lengths must match to compare

任何帮助是极大的赞赏!

尼尔斯·华金

有人可能有一个更优雅的解决方案,但在我的头上,我会加入df2df1两倍,让你在一个数据集得到的一切,和比较容易。

df2基本上是一个查找表,df2.chr应该分别匹配df1.chr1匹配df1.chr2

df_all = df1.merge(df2,
                   how='inner',
                   left_on='chr1',
                   right_on='chr') \
            .merge(df2,
                   how='inner',
                   left_on='chr2',
                   right_on='chr',
                   suffixes=('_r1', '_r2'))

注意后缀。所以pos1将被测试在start_r1-stop_r1范围内,pos2并将被测试在start_r2-stop_r2范围内。

df3 = df_all[(df_all['pos1'] \
                  .between(df_all['start_r1'], df_all['stop_r1'])) &
             (df_all['pos2'] \
                  .between(df_all['start_r2'], df_all['stop_r2']))]

# Back to four original columns again
df3 = df3[['chr1', 'pos1', 'chr2', 'pos2']]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何合并两个不同长度的数据帧,一个是另一个的子集

来自分类Dev

使用ifelse()通过引用另一个不同长度的数据帧来替换一个数据帧中的NA

来自分类Dev

R:另一个向量的子集数据帧

来自分类Dev

如何根据R中的另一个数据帧过滤和子集数据帧

来自分类Dev

将条件中的行从一个数据帧替换为另一个具有不同长度的行 [python]

来自分类Dev

一个条件为另一个数据帧的数据帧的R-子集

来自分类Dev

用另一个不同大小的 Pandas 数据帧减去 Pandas 数据帧

来自分类Dev

尝试使用来自另一个不同结构的数据帧的值填充数据帧中的列

来自分类Dev

根据跨另一个(摘要)数据帧中几列的键为数据帧设置子集

来自分类Dev

根据R中另一个数据帧中的行为数据帧中的行设置子集

来自分类Dev

如何基于基础R中的另一个数据帧对数据帧进行子集

来自分类Dev

使用另一个数据帧查找数据帧的对应行值

来自分类Dev

一个数据帧具有另一个维度不同的数据帧的强大功能

来自分类Dev

连接两个不同长度的数据帧

来自分类Dev

如何合并两个不同长度的数据帧?

来自分类Dev

通过子集另一个并添加后缀来循环创建多个新数据帧

来自分类Dev

使用另一个子集数据框删除行

来自分类Dev

将一个数据帧中的值匹配到不同长度的第二个数据帧中的值

来自分类Dev

合并不同长度的数据帧

来自分类Dev

如何在数据帧中不同长度的列之间执行交叉检查并创建一个新的数据帧?

来自分类Dev

合并数据帧,同时保持R中一个的长度和另一个的长度

来自分类Dev

R-扩展数据帧的长度以使其与另一个相似

来自分类常见问题

如何从另一个重复的数据帧更新一个数据帧

来自分类Dev

如何从另一个重复的数据帧更新一个数据帧

来自分类Dev

为什么在子集数据帧时会返回一个因子?

来自分类Dev

根据来自另一个数据帧的特定数值间隔对一个数据帧进行子集

来自分类Dev

如何将一个数据帧作为子集(完整)查找或匹配到 R 中的另一个数据帧?

来自分类Dev

更新 Spark 数据帧以从另一个数据帧填充数据

来自分类Dev

熊猫使用熊猫数据帧的索引更新同一索引上的另一个数据帧

Related 相关文章

  1. 1

    如何合并两个不同长度的数据帧,一个是另一个的子集

  2. 2

    使用ifelse()通过引用另一个不同长度的数据帧来替换一个数据帧中的NA

  3. 3

    R:另一个向量的子集数据帧

  4. 4

    如何根据R中的另一个数据帧过滤和子集数据帧

  5. 5

    将条件中的行从一个数据帧替换为另一个具有不同长度的行 [python]

  6. 6

    一个条件为另一个数据帧的数据帧的R-子集

  7. 7

    用另一个不同大小的 Pandas 数据帧减去 Pandas 数据帧

  8. 8

    尝试使用来自另一个不同结构的数据帧的值填充数据帧中的列

  9. 9

    根据跨另一个(摘要)数据帧中几列的键为数据帧设置子集

  10. 10

    根据R中另一个数据帧中的行为数据帧中的行设置子集

  11. 11

    如何基于基础R中的另一个数据帧对数据帧进行子集

  12. 12

    使用另一个数据帧查找数据帧的对应行值

  13. 13

    一个数据帧具有另一个维度不同的数据帧的强大功能

  14. 14

    连接两个不同长度的数据帧

  15. 15

    如何合并两个不同长度的数据帧?

  16. 16

    通过子集另一个并添加后缀来循环创建多个新数据帧

  17. 17

    使用另一个子集数据框删除行

  18. 18

    将一个数据帧中的值匹配到不同长度的第二个数据帧中的值

  19. 19

    合并不同长度的数据帧

  20. 20

    如何在数据帧中不同长度的列之间执行交叉检查并创建一个新的数据帧?

  21. 21

    合并数据帧,同时保持R中一个的长度和另一个的长度

  22. 22

    R-扩展数据帧的长度以使其与另一个相似

  23. 23

    如何从另一个重复的数据帧更新一个数据帧

  24. 24

    如何从另一个重复的数据帧更新一个数据帧

  25. 25

    为什么在子集数据帧时会返回一个因子?

  26. 26

    根据来自另一个数据帧的特定数值间隔对一个数据帧进行子集

  27. 27

    如何将一个数据帧作为子集(完整)查找或匹配到 R 中的另一个数据帧?

  28. 28

    更新 Spark 数据帧以从另一个数据帧填充数据

  29. 29

    熊猫使用熊猫数据帧的索引更新同一索引上的另一个数据帧

热门标签

归档