如何从Pandas中的groupby对象中选择不同的行

时间:2014-01-15 01:43:01

标签: python pandas

我正在尝试根据条件从groupby对象中删除行:

Group    value
  A        0
  A       20
  A       25
  B        5
  C        6
  C       17

使用数据框,如果我想删除值小于10的任何内容,我可以调用df[df['value']>=10]。我似乎找不到用groupby对象做类似事情的方法来获取。

 Group    value
  A       20
  A       25
  C       17

2 个答案:

答案 0 :(得分:3)

也许你正在寻找filter 如果想要返回与值相关的行的行大于或等于10:

In [11]: g = df.groupby('Group')

In [12]: g.filter(lambda x: x.value.sum() >= 10)
Out[12]: 
  Group  value
0     A      0
1     A     20
2     A     25
4     C      6
5     C     17

[5 rows x 2 columns]

你需要提供一个作用于每个subDataFrame的函数并返回一个布尔结果,一个subDataFrames的例子是df[df['Group'] == 'A']

答案 1 :(得分:1)

要么我不理解你的意图,要么解决方案是微不足道的:

group = "A A A B C C".split()
value = [0,20,25,5,6,17]
df = DataFrame(zip(group, value), columns='group value'.split())
df

     group   value
0    A       0
1    A       20
2    A       25
3    B       5
4    C       6
5    C       17

g = df.groupby('group')
g.sum()[(g.sum() >=10)['value']]

     value
group   
A    45
C    23

我猜你假设你可以在groupby对象中选择东西。据我所知,你做不到。但您可以在生成的对象中执行此操作, 后应用聚合函数。