我正在尝试返回一个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中所有值的总和,每个字母的条目数超过3,我该怎么做?根据提供的数据,这将是[2,1](B为2,C为1)
答案 0 :(得分: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
操作产生的对象是一个可迭代对象,其“iterands”是组标签的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
将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