根据列表中的值修剪Pandas DataFrame

时间:2014-09-15 21:57:12

标签: python pandas

我试图根据输入列表修剪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

我希望有更简单的方法!

谢谢,

1 个答案:

答案 0 :(得分:2)

你可以这样做:

>>> i = element_frame[['n1', 'n2', 'n3', 'n4']].isin(node_list).any(axis=1)

然后,i将是布尔索引器:

>>> element_frame[i]