我试图根据输入列表修剪DataFrame,但我需要检查列表中的项目是否在某些框架的列中。
(以下数据是随机的)
我想修剪的框架看起来像这样:
UID S1 S2 ElementHID n1 n2 n3 n4
0 88.340153 -88.340153 144 1 4 5 5
1 66.370153 -66.370153 144 4 1 5 4
2 74.422513 -74.422513 144 2 7 3 6
3 22.324573 -22.324573 144 1 9 8 1
4 14.322413 -14.322413 144 3 4 6 3
每行代表一个最多可包含4个节点的元素。
我有一个节点列表(node_list),我已从另一个帧中过滤掉了,我想进入这里并获取哪些元素触及那些节点(节点可能位于n1,n2,n3 ,n4)。在一个节点上可以有许多元素连接,因此' n'列有重复数据。
我想避免在整个帧中循环。我试过了,但是花了太长时间。我希望这可以通过熊猫来完成。
每行的基本逻辑类似于[如果节点在n1或n2或n3或n4中的行],其中节点循环通过node_list
到目前为止,我已尝试单独浏览各列,但在将所有内容合并到frame_list后,我无法保持列的完整性。
frame_list = []
for n in range(1, 4):
node = 'n' + str(n)
if node in element_frame.columns:
temp_frame = element_frame.merge(pd.DataFrame(node_list), left_on = node, right_on='uid', how = 'inner')
frame_list.append(temp_frame)
else:
continue
我希望有更简单的方法!
谢谢,
躯
答案 0 :(得分:2)
你可以这样做:
>>> i = element_frame[['n1', 'n2', 'n3', 'n4']].isin(node_list).any(axis=1)
然后,i
将是布尔索引器:
>>> element_frame[i]