首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何操作一个数据帧中的索引并过滤另一个数据帧中的索引

如何操作一个数据帧中的索引并过滤另一个数据帧中的索引
EN

Stack Overflow用户
提问于 2018-04-03 06:13:10
回答 2查看 24关注 0票数 0

我开始学习熊猫,并停留在以下问题上:

我有两个大的DataFrames: df1=

代码语言:javascript
复制
ID                                 KRAS        ATM
TCGA-3C-AAAU-01A-11R-A41B-07       101         32
TCGA-3C-AALI-01A-11R-A41B-07       101         75
TCGA-3C-AALJ-01A-31R-A41B-07       102         65
TCGA-3C-ARLJ-01A-61R-A41B-07       87          54

df2=

代码语言:javascript
复制
ID                                 BRCA1        ATM
TCGA-A1-A0SP                       54           65
TCGA-3C-AALI                       191          8
TCGA-3C-AALJ                       37           68

ID是这两个df中的索引。首先,我希望在df1中将ID的名称减少到前10位(将TCGA-3C-AAAU-01A-11R-A41B-07转换为TCGA-3C-AAAU)。然后,我想从df1生成一个新的df,它的ID与df2中存在的ID相同。

df3应该如下所示:

代码语言:javascript
复制
 ID                                KRAS        ATM 
TCGA-3C-AALI                       101         75 
TCGA-3C-AALJ                       102         65

我尝试了不同的方法,但都失败了。对此有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-03 06:17:45

IIUC TCGA-3C-AAAU这包含12个字符:-)

代码语言:javascript
复制
df3=df1.assign(ID=df1.ID.str[:12]).loc[lambda x:x.ID.isin(df2.ID),:]
df3
Out[218]: 
             ID  KRAS  ATM
1  TCGA-3C-AALI   101   75
2  TCGA-3C-AALJ   102   65
票数 0
EN

Stack Overflow用户

发布于 2018-04-03 06:21:38

以下是使用矢量化函数的一种方法:

代码语言:javascript
复制
# truncate to first 10 characters, or 12 including '-'
df1['ID'] = df1['ID'].str[:12]

# filter for IDs in df2
df3 = df1[df1['ID'].isin(df2['ID'])]

结果

代码语言:javascript
复制
             ID  KRAS  ATM
1  TCGA-3C-AALI   101   75
2  TCGA-3C-AALJ   102   65

说明

  • 使用.str访问器将df1['ID']限制为前12个characters.
  • Mask df1,以便仅包括在df2.

中找到的in

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49619508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档