免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2350 | 回复: 1

如何根据一个数据框的值过滤另一个数据框 [复制链接]

论坛徽章:
0
发表于 2018-09-05 10:17 |显示全部楼层
现在有两个pandas数据框:
data1,有三列
   start  end strand
     -1   38      W
     60  235      W
    235  418      W
    454  500      W
     -1   43      C
     79  262      C
    262  437      C
    459  500      C


data2,有两列
    start strand
     39      W
     56      W
     61      W
    119      W
    187      W
    220      W
    455      W
    483      W
     14      C
     42      C
     64      C
     78      C
    156      C
    192      C


现在想根据data1过滤data2,条件是,在strand这一列值相同的情况下,data2的第一列应在data1的前两列的范围内,例如:
39,其strand=W,其值不存在于[-1,38],[60,235],[235,418],[454,500]任意一个范围内,因此过滤掉data2的这一行

请问这个该怎么做?

论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-09-07 12:55 |显示全部楼层
本帖最后由 christmas1102 于 2018-09-07 13:02 编辑
  1. # -*- coding: utf-8 -*-
  2. a=[];b=[];c=[];d=[];e=[];f=[]

  3. with open(r'E:\data1.txt','r+') as f1:
  4.     for line1 in f1.readlines():
  5.         line1 = line1.rstrip("\n")
  6.         a.append(line1.split())
  7.         f1.close()

  8. with open(r'E:\data2.txt','r+') as f2:
  9.     for line2 in f2.readlines():
  10.         line2 = line2.rstrip("\n")
  11.         b.append(line2.split())
  12.         f2.close()

  13. for i in range(1,len(a)):
  14.     if a[i][2] == 'W':
  15.         c.append([int(x) for x in a[i][:2]])
  16.     elif a[i][2] == 'C':
  17.         e.append([int(x) for x in a[i][:2]])

  18. for i in range(1,len(b)):
  19.     if b[i][1] == 'W':
  20.         d.append(int(b[i][0]))
  21.     elif b[i][1] == 'C':
  22.         f.append(int(b[i][0]))
  23. #---------------------------------
  24. print(b[0][0] + "\t" + b[0][1])
  25. for i in d:
  26.     for j in range(len(c)):
  27.         if i in range(c[j][0],c[j][1]+1):
  28.             print("%d\t\t  %s" % (i,'W'))
  29. for i in f:
  30.     for j in range(len(e)):
  31.         if i in range(e[j][0],e[j][1]+1):
  32.             print("%d\t\t  %s" % (i, 'C'))
复制代码

E盘data1.txt
E盘data2.txt

草稿无简,凑合着用吧

评分

参与人数 1信誉积分 +5 收起 理由
elaine2017 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP