我有一个类似于这个虚构的数据集
data = {'category':['foo','foo','foo','foo','foo','bar','bar','bar','bar','bar'],'part':['101','102','103','104','105','201','202','203','204','205'],'site_a':['yes','yes','no','no','no','no','yes','no','no','no'],'site_b':['no','no','no','no','no','no','yes','no','no','no'],'site_c':['yes','no','no','no','no','no','no','no','no','no']}
我需要按类别分组,并筛选出每个类别值全部为“否”的网站。对于类别“foo”,“site_b”将为真,而对于类别“bar”,“site_c”将为真。我想如果我将“是”转换为 1,将“否”转换为 0,那么如果我使用 groupby,我就可以执行某种聚合函数。我也读过关于多索引的文章,但不确定如何遍历类别以查找哪些网站全部为“否”值。
这就是我的多索引的样子
df.set_index(['category','part'], inplace=True)
site_a site_b site_c
category part
foo 101 yes no yes
102 yes no no
103 no no no
104 no no no
105 no no no
bar 201 no no no
202 yes yes no
203 no no no
204 no no no
205 no no no
这样,如果某个站点没有使用该类别中的某个部分,那么我会从每个站点的类别/部分列表中删除该类别。
非常感谢关于使用 groupby 或 multiindex 的指导
IIUC,
输出:
数据框重组:
输出:
另一种可能的解决方案是不使用任何
MultiIndex
,并且按如下方式进行:首先使用 对进行
df
分组。category
groupby
然后,对于每个指定的列(
site_a
、site_b
和site_c
),它在方法中应用 lambda 函数agg
来验证每个组中的所有值是否等于'no'
。lambda 函数用于
eq
将每个值与 进行比较'no'
,并all
确认组中的每个值都符合条件。输出: