楼主: 不二不幸福
1713 3

[问答] 如何根据一个数据框的值过滤另一个数据框 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
181 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1591 点
帖子
76
精华
0
在线时间
159 小时
注册时间
2017-9-26
最后登录
2022-3-30

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在有两个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的这一行

请问这个该怎么做?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据框 pandas Start panda Data

沙发
y3534365 发表于 2018-9-27 21:04:44 |只看作者 |坛友微信交流群
这种难度的问题还想让人免费帮你解决...过分了吧
给500块我考虑一下

使用道具

藤椅
不二不幸福 发表于 2018-9-28 11:08:29 |只看作者 |坛友微信交流群
y3534365 发表于 2018-9-27 21:04
这种难度的问题还想让人免费帮你解决...过分了吧
给500块我考虑一下
只是想提供个思路而已。。。。已经解决

使用道具

板凳
人脉引爆点 在职认证  发表于 2018-9-29 11:29:03 |只看作者 |坛友微信交流群
想到两个方法,一个用循环,一个用连接,如果有好的方法, 希望可以分享,谢谢!

循环代码:
l=[]
for i in range(len(data2)):
    result=(data1["strand"]==data2.iloc[i,1])&((data1["start"]==data2.iloc[i,0]) |(data1["end"]==data2.iloc[i,0]))
    if result.any():
        l.append(i)
data2.iloc[l]


连接代码:
data3=data2.merge(data1,on="strand")
data4=data3[(data3["start_x"]==data3["start_y"]) | (data3["start_x"]==data3["end"])]
data4.drop(["start_y","end"],inplace=True,axis=1)
data4.columns=["start","strand"]

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 08:20