如何在一个数据帧中操作索引并在另一个数据帧中筛选索引

2024-05-15 21:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始学习熊猫,并坚持以下问题:

我有两个大数据帧: df1=

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=

ID                                 BRCA1        ATM
TCGA-A1-A0SP                       54           65
TCGA-3C-AALI                       191          8
TCGA-3C-AALJ                       37           68

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

df3应该看起来:

 ID                                KRAS        ATM 
TCGA-3C-AALI                       101         75 
TCGA-3C-AALJ                       102         65

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


Tags: 数据iddfa1df1df2atmtcga
2条回答

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

# 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'])]

结果

             ID  KRAS  ATM
1  TCGA-3C-AALI   101   75
2  TCGA-3C-AALJ   102   65

解释

  • 使用.str访问器将df1['ID']限制为前12个字符
  • 屏蔽df1以仅包括在df2中找到的ID

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

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

相关问题 更多 >