gpt4 book ai didi

python - 在保留组的同时,在 Pandas 中的 GroupBy 之后过滤组

转载 作者:行者123 更新时间:2023-11-28 22:19:19 26 4
gpt4 key购买 nike

在 Pandas 中我想做的事:df.groupby('A').filter(lambda x: x.name > 0) - 按 A 列分组,然后过滤具有名称值的组非积极的。但是,这会取消分组,因为 GroupBy.filter 返回 DataFrame 并因此丢失分组。我想按此顺序执行此操作,因为它的计算要求应该较低,因为 filter 后跟 groupby 会两次遍历 DataFrame 否(首先过滤然后分组)?此外,从分组中克隆组(到 dict 或其他东西)将使我失去无缝返回数据框的功能(就像在 .filter 的例子中你直接得到 DataFrame)

谢谢

例子:

   A  B
1 -1 1
2 -1 2
3 0 2
4 1 1
5 1 2

df.groupby('A'):

GroupBy object
-1 : [1, 2]
0 : [3]
1 : [4,5]

GroupBy.filter(lambda x: x.name >= 0):

GroupBy object
0 : [3]
1 : [4,5]

最佳答案

我认为之前的答案提出了变通办法,这些变通办法可能对您的情况有用,但没有回答问题。

您创建了群组,并且您希望根据群组统计信息丢弃或保留一些群组,然后对这些群组执行您真正关心的一些群组统计信息。这应该是可能的,并且在许多情况下很有用,但是,只有当您因此使用两个相同的 groupby 时,现在才不可能将其作为链接命令(据我所知)。

让我们举个例子:Groupby 揭示了一些在项目级别基础上不可过滤的特征(因此以前的过滤不是一个选项)。例如一组总和。过滤器中的烦恼是,它返回一个数据帧而不是保留分组并允许您对组执行进一步的计算。

这是一个例子:

假设您想要按“C”分组并过滤组中“A”的总和 (<700),但在过滤后的组中您实际上关心组的标准差。如果 filter 只是对组的过滤器,这将起作用:

df.groupby(['C']).filter(lambda x:x['A'].sum()<700, combine=False).std()

这不起作用(注意过滤器上不存在的 combine=False 选项),这是什么:

df.groupby(['C']).filter(lambda x:x['A'].sum()<700).groupby(['C']).std()

filter做的其实就是filter&combine,遵循split-apply-combine的逻辑。

关于python - 在保留组的同时,在 Pandas 中的 GroupBy 之后过滤组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com