筛选比较两列的熊猫数据框

时间:2020-02-25 09:16:55

标签: python pandas filter

考虑一个由各种列组成的数据框,但是我想通过比较两列的值来过滤该数据框。下面是数据框的示例。

Machine   Position
  M01         PB0
  M02         PB0
  M03         PB0
  M04         PB0
  M01         PB1
  M02         PB1
  M01         PB1
  M01         PB1

在上面您可以看到所有机器的位置均为PB0,但是只有两台机器同时具有PB0和PB1,现在我希望列出一列同时具有PB0和PB1的机器 machine=['M01','M02'] 要考虑的一件事是,在这两列中可能有很多重复项。

2 个答案:

答案 0 :(得分:2)

让我们定义您的数据框:

import pandas as pd
df = pd.DataFrame({'Machine': {0: 'M01',
  1: 'M02',
  2: 'M03',
  3: 'M04',
  4: 'M01',
  5: 'M02',
  6: 'M01',
  7: 'M01'},
 'Position': {0: 'PB0',
  1: 'PB0',
  2: 'PB0',
  3: 'PB0',
  4: 'PB1',
  5: 'PB1',
  6: 'PB1',
  7: 'PB1'}})

要获得每台机器的位置,无论重复的位置如何,我们可以使用:

s = df.groupby('Machine')['Position'].apply(set)

看起来像这样:

Machine
M01    {PB1, PB0}
M02    {PB1, PB0}
M03         {PB0}
M04         {PB0}
Name: Position, dtype: object

要获取仅包含PB0PB1位置的机器,我们可以使用

s[s.apply(lambda x: x.issuperset({'PB1','PB0'}))].index

返回

Index(['M01', 'M02'], dtype='object', name='Machine')

(如果您更喜欢列表而不是pd.Index,也可以在末尾添加.to_list()

答案 1 :(得分:1)

您可以

new_df = df.groupby("machine").count().reset_index()
m = new_df[new_df["Position"]==2]["machine"].tolist()
print(m)