如何在R语言中基于另一个DataFrame筛选DataFrame数据
用Pandas从DataFrame中筛选匹配另一DataFrame ID的行
现有两个共享id字段的DataFrame:
- df1:包含多列数据(数千行)
- df2:仅包含
id和另一操作列
需要从df1中筛选出所有id存在于df2中的行,生成保留df1全部列的新DataFrame df3,同时自动忽略df2中不存在于df1的id。
示例数据
df1:
| id | zone | category | status |
|---|---|---|---|
| M3RR9000 | I | x | on track |
| M3RR9012 | II | c | finished |
| M3RR9020 | V | v | on track |
df2:
| id | value |
|---|---|
| M3RR9000 | 3 |
期望结果df3:
| id | zone | category | status |
|---|---|---|---|
| M3RR9000 | I | x | on track |
解决方案
方法1:使用isin()直接筛选
通过布尔索引快速筛选出匹配id的行,自动忽略df2中不存在于df1的id:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({ 'id': ['M3RR9000', 'M3RR9012', 'M3RR9020'], 'zone': ['I', 'II', 'V'], 'category': ['x', 'c', 'v'], 'status': ['on track', 'finished', 'on track'] }) df2 = pd.DataFrame({ 'id': ['M3RR9000'], 'value': [3] }) # 筛选id匹配的行 df3 = df1[df1['id'].isin(df2['id'])]
方法2:使用merge()内连接
通过内连接仅保留两个DataFrame共有的id,同时指定只保留df1的列结构:
# 仅用df2的id列做内连接,避免带入多余列 df3 = pd.merge(df1, df2[['id']], on='id', how='inner')
内容的提问来源于stack exchange,提问作者Ramiro Guzmán
相关产品推荐
相关产品推荐

