2

我正在尝试返回一个 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)

4

1 回答 1

3

我认为您误解了以下输出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对象是一个可迭代对象,它的“迭代数”是tuple组标签的 s 和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

将每个组中的成员数大于 2的值相加BoolLetter

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
于 2013-10-18T01:55:16.013 回答