使用另一个数据框过滤数据框
Filtering a dataframe with another dataframe
我有两个 pandas 数据帧。一个保存节点,另一个保存边缘。一个简单的事实:所有边都应该连接到某个节点。
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])))]
尝试以下操作:
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)]
我有两个 pandas 数据帧。一个保存节点,另一个保存边缘。一个简单的事实:所有边都应该连接到某个节点。
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])))]
尝试以下操作:
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)]