仅当所有类别的项目都为True时才返回行

时间:2016-01-24 23:33:35

标签: python python-2.7 pandas

经过一番工作,我设法简化了如下所示的数据框:

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,我们应该返回具有这些类别的所有行。

在我的真实数据框中,有更多的列,但它们都不是唯一的,并且它们都不与切片相关。如果您的解决方案确实需要额外的列,请填写一个而不是使用索引,如果可能但不是必需的。

希望它足够清楚。提前谢谢!

2 个答案:

答案 0 :(得分:1)

假设您的Boolean列实际上是dtype bool(而不是字符串),您可以将groupbytransform一起使用:

>>> 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