【问题标题】:How can I match the values of one dataframe(more than column) with values of another dataframe(more than one column)?如何将一个数据框(多于一列)的值与另一个数据框(多于一列)的值匹配?
【发布时间】:2020-05-23 17:50:35
【问题描述】:

df1:

    Symbol           Aliases
0   MLH1             COCA2, FCC2, HNPCC, HNPCC2, hMLH1
1   MSH2             COCA1, FCC1, HNPCC, HNPCC1, LCFS2
2   CCAT2            LINC00873, NCCP1
3   MACC1            7A5, SH3BP4L

在这里,别名可以有 NaN 值。

df2:

   Symbol_1        Symbol_2
0  NaN             DHX9
1  COCA1           MSH2
2  H2AC18          NaN
3  NCCP1           NaN

我希望将结果作为一个列表,其中包含 df1 和 df2 中相同的所有符号。

same_list = [MSH2, CCAT2]

如果 df2['Symbol_1', 'Symbol_2'] 匹配 df1['Symbol'] 它将打印 Symbol 但如果它匹配 df1['Aliases'] 它将从 df1 打印相应的 Symbol。

我们可以看到 NCCP1 与 df1['Aliases'] 匹配,但它会打印相应的符号,即 CCAT2

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用flatten()set() 来获取您的值。

    如果df1 是:

      Symbol                        Aliases
    0   MLH1  COCA2,FCC2,HNPCC,HNPCC2,hMLH1
    1   MSH2  COCA1,FCC1,HNPCC,HNPCC1,LCFS2
    2  CCAT2                LINC00873,NCCP1
    3  MACC1                    7A5,SH3BP4L
    

    df2 是:

    Symbol_1 Symbol_2
    0      NaN     DHX9
    1    COCA1     MSH2
    2   H2AC18      NaN
    3    NCCP1      NaN
    

    然后这个脚本:

    df1.Aliases = df1.Aliases.str.split(',')
    s1 = set(df1.explode('Aliases').values.flatten())
    s2 = set(df2.values.flatten())
    print(s1 & s2)
    

    打印:

    {'NCCP1', 'COCA1', 'MSH2'}
    

    【讨论】:

    • 但是,我收到错误消息“'DataFrame' object has no attribute 'explode'”
    • 如果我想要结果为 same_list = [MSH2, CCAT2] 我该怎么做,那么我需要打印相应的Symbol
    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    相关资源
    最近更新 更多