【问题标题】:How to filter based on a boolean in a column and return a groupby obj如何根据列中的布尔值进行过滤并返回 groupby obj
【发布时间】:2013-10-26 17:37:46
【问题描述】:

我正在尝试返回一个 groupby 对象,该对象仅包含我要分组的字段的 3 个或更多条目的项目。例如,如果我有以下对象并且我在 'Letters' 上分组:

Letters Numbers Items Bool
A       1       lamp  1
B       2       glass 1
B       2       table 1
C       5       pic   0
B       3       glass 0
C       4       bottle 1
C       2       horse 0

那么我的代码只会返回一个带有 b 的 groupby 对象

我尝试了以下方法:

old_df = a_df.groupby('Letters')
new_df = old_df.filter(len(old_df['Letters'])>2)

我也尝试过这里提到的一些 lambda 东西:filtering grouped df in pandas

谢谢!


因此,如果我想返回一个向量,其中每个字母的 Bool 中所有值的总和,其中每个字母的条目数超过三个,我该怎么做?根据提供的数据,这将是 [2,1](B 为 2,C 为 1)

【问题讨论】:

  • 已修改,抱歉!不是说'a'
  • 我想你的意思是“超过或等于三”

标签: python pandas


【解决方案1】:

我认为你误解了groupby 的输出:

In [4]: df
Out[4]:
  Letters  Numbers  Items  Bool
0       A        1   lamp     1
1       B        2  glass     1
2       B        2  table     1
3       C        5    pic     0
4       B        3  glass     0

In [6]: df.groupby('Letters').filter(lambda x: len(x) > 2)
Out[6]:
  Letters  Numbers  Items  Bool
1       B        2  glass     1
2       B        2  table     1
4       B        3  glass     0

groupby 操作产生的对象是一个可迭代对象,它的“迭代数”是组标签的tuples 和对应于组的原始DataFrame 的子集。例如,

In [9]: for name, subset in df.groupby('Letters'):
   ...:     print(name)
   ...:     print(subset)
   ...:     print('\n')
   ...:
A
  Letters  Numbers Items  Bool
0       A        1  lamp     1


B
  Letters  Numbers  Items  Bool
1       B        2  glass     1
2       B        2  table     1
4       B        3  glass     0


C
  Letters  Numbers Items  Bool
3       C        5   pic     0

将Bool 的值与Letter 相加,其中每个组的成员数大于2:

In [39]: df.groupby('Letters').filter(lambda x: len(x) > 2).groupby('Letters').Bool.sum()
Out[39]:
Letters
B          2
C          1
Name: Bool, dtype: int64

【讨论】:

  • 请参阅问题底部添加的部分。不过谢谢,这很有帮助,我肯定是误会了。
  • 你如何过滤?当我尝试过滤时,它不会返回 groupby obj 所以这对我不起作用...再次感谢您的帮助!!!我一直在尝试使用文档...pandas.pydata.org/pandas-docs/stable/groupby.html
猜你喜欢
  • 2011-02-05
  • 2013-09-11
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
相关资源
最近更新 更多