经过一番工作,我设法简化了如下所示的数据框:
Category | Boolean
A | True
A | True
A | False
B | True
B | True
C | True
C | True
B | False
D | True
C | True
现在,我想在列'布尔'中获取类别只有True的行。另一种说法是:仅返回给定类别的行只有True出现在列'布尔'。
从上面的示例DF中,我希望获得:
Category | Boolean
C | True
C | True
D | True
C | True
不应返回类别为A或B的行,因为至少有一个具有此类别的行具有False。但是,因为对于类别C和D,所有行都是True,我们应该返回具有这些类别的所有行。
在我的真实数据框中,有更多的列,但它们都不是唯一的,并且它们都不与切片相关。如果您的解决方案确实需要额外的列,请填写一个而不是使用索引,如果可能但不是必需的。
希望它足够清楚。提前谢谢!
答案 0 :(得分:1)
假设您的Boolean
列实际上是dtype bool
(而不是字符串),您可以将groupby
与transform
一起使用:
>>> df.loc[df.groupby("Category")["Boolean"].transform(all)]
Category Boolean
5 C True
6 C True
8 D True
9 C True
因为我们有
而有效>>> df.groupby("Category")["Boolean"].all()
Category
A False
B False
C True
D True
Name: Boolean, dtype: bool
等等
>>> df.groupby("Category")["Boolean"].transform(all)
0 False
1 False
2 False
3 False
4 False
5 True
6 True
7 False
8 True
9 True
Name: Boolean, dtype: bool
答案 1 :(得分:0)
x=df.groupby(df.category).aggregate(np.all)
应该创建一个数据框,其左列是各个类型,如果所有项都为真,则右列为true。
x[x.Boolean]
只能返回那些属实的类别。
https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html