【问题标题】:Filtering a dataframe with another dataframe用另一个数据框过滤一个数据框
【发布时间】:2021-10-31 19:54:09
【问题描述】:

我有两个熊猫数据框。一个持有节点,另一个持有边。一个简单的事实:所有边都应该连接到某个节点。

edges
11                 ["INET_N_752", "INET_N_1730"]
253     ["SEQ_5753__L_LMGN", "SEQ_5369__S_LMGN"]
254         ["N_211_L_LMGN", "SEQ_5753__L_LMGN"]
277            ["SEQ_5753__L_LMGN", "SEQ_867_p"]
278                   ["SEQ_867_p", "SEQ_871_p"]
279            ["SEQ_871_p", "SEQ_5789__L_LMGN"]

上面是边df。这些值是包含两个字符串的列表。

下面是节点df。这些值也是列表,但是这次它们只包含一个字符串对象。

nodes
15            ["INET_N_752"]
16           ["INET_N_1730"]
196     ["SEQ_5753__L_LMGN"]
197     ["SEQ_5369__S_LMGN"]
198         ["N_211_L_LMGN"]
222            ["SEQ_867_p"]

我想用节点过滤边。

因此,如果边列表的两个元素出现在节点中的一个元素中,则应选择该索引。

示例:edges[11] = ['INET_N_752', 'INET_N_1730'],因此节点 df 中应该有 ['INET_N_752']['INET_N_1730']

我该怎么做?

这行得通

edges[(edges.apply(lambda x: x[0]).isin(nodes.apply(lambda x: x[0])) &
       edges.apply(lambda x: x[1]).isin(nodes.apply(lambda x: x[0])))]

【问题讨论】:

    标签: python pandas filtering isin


    【解决方案1】:

    尝试以下方法:

    edges = pd.DataFrame(edges.to_list(), columns=['node1','node2'])
    nodes = nodes.applymap(lambda n: n[0])
    edges[(edges.node1.isin(nodes)) & (edges.node2.isin(nodes)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2018-11-12
      相关资源
      最近更新 更多