gpt4 book ai didi

python - 使用 pandas 方法链接过滤每组中任何一个满足条件的行

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:53 24 4
gpt4 key购买 nike

郑重声明,我已阅读以下这些主题,但似乎没有一个能满足我的需求:

假设我有下表 df :

 user_id  is_manually  created_per_week
----------------------------------------
10 True 59
10 False 90
33 True 0
33 False 64
50 True 0
50 False 0

我想排除没有创建任何内容的用户,即 is_manually True 和 False 两行中的created_per_week 均为 0,在本例中为用户 50。

 user_id  is_manually  created_per_week
----------------------------------------
10 True 59
10 False 90
33 True 0
33 False 64

我了解到df.groupby没有query方法并应使用 apply相反。

我得到的最接近的答案是df.groupby("user_id").apply(lambda x: x[x["created_per_week"] > 0]) ,但同时也手动排除了用户 33 的行 True,这是不可取的。我也尝试过df.groupby("user_id").apply(lambda x: x[any(x["created_per_week"] > 0)])但它返回一个 KeyError。

换句话说,我正在搜索 df %>% group_by(user_id) %>% filter(any(created_per_week > 0)) 的等价项在 R 中。谢谢。

最佳答案

变换 + 任意

df[df.assign(New=df.created_per_week==0).groupby('user_id').created_per_week.transform('any')]
Out[425]:
user_id is_manually created_per_week
0 10 True 59
1 10 False 90
2 33 True 0
3 33 False 64

或者简单地使用loc+isin

df.loc[df.user_id.isin(df[df.created_per_week!=0].user_id)]
Out[426]:
user_id is_manually created_per_week
0 10 True 59
1 10 False 90
2 33 True 0
3 33 False 64

来自 PiR

f, u = pd.factorize(df.user_id); df[np.bincount(f, df.created_per_week)[f] > 0]

关于python - 使用 pandas 方法链接过滤每组中任何一个满足条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49397244/

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