2024-05-19 16:35:43 发布
网友
考虑由不同列组成的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'] 要考虑的是这两个列中可能有很多重复。
machine=['M01','M02']
你能行
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
要仅获取其位置同时包含PB0和PB1的机器,我们可以使用
PB0
PB1
s[s.apply(lambda x: x.issuperset({'PB1','PB0'}))].index
返回
Index(['M01', 'M02'], dtype='object', name='Machine')
(如果您更喜欢列表而不是pd.Index,还可以在末尾添加.to_list())
.to_list()
你能行
让我们定义您的数据帧:
为了获得每台机器的位置,无论重复的位置如何,我们可以使用:
看起来是这样的:
要仅获取其位置同时包含
PB0
和PB1
的机器,我们可以使用返回
(如果您更喜欢列表而不是pd.Index,还可以在末尾添加
.to_list()
)相关问题 更多 >
编程相关推荐