我正在尝试根据条件从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
答案 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对象中选择东西。据我所知,你做不到。但您可以在生成的对象中执行此操作, 后应用聚合函数。