比较两列筛选数据帧

2024-05-19 16:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑由不同列组成的DATAFRAME,但我想通过比较两列的值来过滤数据文件。下面是dataframe的示例

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'] 要考虑的是这两个列中可能有很多重复。


Tags: 机器示例dataframe列表数据文件positionmachinem01
2条回答

你能行

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

让我们定义您的数据帧:

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()

相关问题 更多 >