根据其他数据框的列映射数据框

Posted

技术标签:

【中文标题】根据其他数据框的列映射数据框【英文标题】:Mapping a dataframe based on the columns from other dataframe 【发布时间】:2017-01-16 08:48:49 【问题描述】:

我有两个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 如下所示:

df2.head()
#chr    start   end
chr1    141477  173860
chr1    745500  753000
chr16   56228385    56229180
chr11   101785507   101786117
chr7    101961796   101962267

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

如果是这种情况,打印如下:

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

非常感谢任何建议和帮助。

【问题讨论】:

检查这个问题:***.com/questions/30627968/… 【参考方案1】:

我认为您可以将mergeboolean indexing 一起使用:

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

def start_smaller_than_end(df1,df2):
    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']]
    return df

df3 = start_smaller_than_end(df1,df2)
print (df3)    

【讨论】:

谢谢,但是两个数据帧的长度不同,所以抛出这个错误,ValueError: Series lengths must match to compare 是的,但您需要先将其合并并在merged 数据帧df 中进行比较。合并后还有问题吗? 对不起,我没有尝试合并 df ,我明白了,它现在正在工作。非常感谢..!!! 有没有办法让它成为我上面定义的函数? 好的,请稍等。

以上是关于根据其他数据框的列映射数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何针对其他数据框的行查询python数据框?

根据另一列值更新数据框的列

根据其他列将数据框的一列转换为numpy数组或张量

根据 R 中的列名创建一个新数据框,其中包含来自另一个数据框的列

如何将 numpy 数组存储在 Pandas 数据框的列中?

如何将 numpy 数组存储在 Pandas 数据框的列中?