Python 比较两列筛选数据帧
考虑一个由不同列组成的数据帧,但我希望通过比较两列的值来过滤数据帧。下面是dataframe的示例Python 比较两列筛选数据帧,python,pandas,filter,Python,Pandas,Filter,考虑一个由不同列组成的数据帧,但我希望通过比较两列的值来过滤数据帧。下面是dataframe的示例 Machine Position M01 PB0 M02 PB0 M03 PB0 M04 PB0 M01 PB1 M02 PB1 M01 PB1 M01 PB1 上面你可以看到所有的机器都有位置PB0,但是只有两台机器同时有PB0和P
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']
需要考虑的是这两个列中可能有很多重复。 让我们定义您的数据文件:
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
要仅获取位置同时包含PB0
和PB1
的机器,我们可以使用
s[s.apply(lambda x: x.issuperset({'PB1','PB0'}))].index
返回
Index(['M01', 'M02'], dtype='object', name='Machine')
(如果您喜欢列表而不是pd.索引,还可以在末尾添加一个。
。您可以这样做
new_df = df.groupby("machine").count().reset_index()
m = new_df[new_df["Position"]==2]["machine"].tolist()
print(m)
您在下面写的是一个预期的数据帧,但没有,只有示例。