基于其他datafram中的列映射数据帧

2024-06-25 23:24:09 发布

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

我有两个DataFrames。一个看起来像这样:

df1.head()
#CHR    Start   End Name
chr1    141474  173862  SAP
chr1    745489  753092  ARB
chr1    762988  794826  SAS
chr1    1634175 1669127 ETH
chr1    2281853 2284259 BRB

第二个DataFrame如下所示:

^{2}$

我希望从两个DataFrames映射前三列,并创建一个新的DataFramedf3。例如,如果df1df2中的#chr相等,则查找df2.start >= df1.start和{}。在

如果是这种情况,请按以下方式打印:

df3.head()

#chr    start   end Name
chr1    141477  173860  SAP
chr1    745500  753000  ARB

到目前为止,我尝试创建一个函数来执行此操作:

def start_smaller_than_end(df1,df2):
    if df1.CHR == df2.CHR:
        df2.start >= df1.Start
        df2.End <= df2.End

    return df3

但是,当我运行它时,我得到以下错误:

df3(df1, df2)
name 'df3' is not defined

如有任何建议和帮助,我们将不胜感激。在


Tags: namedataframestartheadenddataframesdf1sap
1条回答
网友
1楼 · 发布于 2024-06-25 23:24:09

我想你可以用^{}^{}

df = pd.merge(df1, df2, how='outer', left_on='#CHR', right_on='#chr')

df = df[(df.start >= df.Start) & (df.end <= df.End)]
df = df[['#chr','start','end','Name']]
print (df)
   #chr   start     end Name
0  chr1  141477  173860  SAP
3  chr1  745500  753000  ARB

按注释编辑:

函数start_smaller_than_end

^{pr2}$

相关问题 更多 >