我在熊猫中有下面的基于行的数据集,并希望过滤满足多个标准的模块,例如所有带有(setting='Foo' and value=2) and (setting='bar' and value=1)的模块
目前,我正在为每个标准分别获得模块,然后构建所有单个结果的交集。是否有更有效的方法,例如将数据集转换为基于列的数据集,然后使用一个查询(setting_foo=2 and settting_bar=3)进行过滤
module setting value
-----------------------------------------
A Foo 2
A bar 1
B Foo 3
B bar 1
...本例所需的输出将是模块A,因为模块B实现了bar=1,而不是foo=2
发布于 2022-02-17 07:54:18
您可以使用.pivot为每个模块创建Foo列和Bar列,如下所示:
df_pivot = df.pivot(index='module', columns='setting', values='value').reset_index()给予:
setting module Foo bar
0 A 2 1
1 B 3 1然后可以使用.loc筛选Foo=2和bar=1所在的位置,并对模块列进行筛选,如下所示:
df_pivot.loc[(df_pivot['Foo'] == 2) & (df_pivot['bar'] == 1), 'module']其中产出:
0 A
Name: module, dtype: objecthttps://stackoverflow.com/questions/71154168
复制相似问题