比较pandas中groupby对象中的列

2024-07-01 07:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧如下所示:

id      month       spent       limit
1        1           2.6         10
1        2           4           10
1        3           6           10
2        1           3           100
2        2           89          100
2        3           101         100
3        1           239         500
3        2           432         500
3        3           100         500

我想按id分组,然后为groupby对象中的每一行获取花费列小于或等于limit列的id

对于我上面的例子,我应该得到ids1和ids3作为我的结果,因为id2在第3个月花费101,因此超过了100的限制

我怎样才能在熊猫中有效地做到这一点

提前谢谢


Tags: 数据对象id例子花费limitid2groupby
3条回答

您可以通过查找花费大于限制的id来创建掩码。遮罩遮住了遮罩里的身份证

mask = df.loc[df['spent'] > df['limit'], 'id'].values.tolist()
df.id[df['id'] != mask].unique()

给你

array([1, 3])

这会给你一些你想要的东西

df.groupby('id').apply(lambda g: (g.spent < g.limit).all()).to_frame('not_exceeded').query('not_exceeded == True')

逆向逻辑!检查花费大于限制的唯一ID。然后过滤掉那些

df[~df.id.isin(df.set_index('id').query('limit < spent').index.unique())]

   id  month  spent  limit
0   1      1    2.6     10
1   1      2    4.0     10
2   1      3    6.0     10
6   3      1  239.0    500
7   3      2  432.0    500
8   3      3  100.0    500

相关问题 更多 >

    热门问题