为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 python 中的 groupby 之后删除一行?

如何在 python 中的 groupby 之后删除一行?

哆啦的时光机 2023-03-16 11:07:02
我有以下数据框:account_num   trans_cdi1             c1             d  3             d3             c3             d它是更大数据框的一部分。首先,我想对 account_num 列进行分组,然后删除组中 trans_cdi 列中以“d”开头的行。所以在这种情况下,新的数据框看起来像这样:account_num   trans_cdi1             c1             d  3             c3             d我那样试过,但它删除了整个组:df = df.groupby("account_numb").filter(lambda x: x["trans_cdi"].iloc[0] != "d")谢谢!
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您可以先获取每组的行数,然后计算 if not(row count equals 0 and row equals d) 它处理每组中不等于 d 的第一行。


idx = df.groupby('account_num').cumcount()

out = df[~(idx.eq(0) & df['trans_cdi'].eq('d'))]

print(out)


   account_num trans_cdi

0            1         c

1            1         d

3            3         c

4            3         d


查看完整回答
反对 回复 2023-03-16
?
三国纷争

TA贡献1804条经验 获得超7个赞

filter由于某种原因我无法使用它,所以我transform改用了索引,它返回了预期的输出:


df2 = df[df.groupby('account_num')['trans_cdi'].transform(lambda x: (x.iloc[0] != "d") | (x.index != x.index[0]))]



   account_num trans_cdi

0            1         c

1            1         d

3            3         c

4            3         d

这会概括您的想法吗?


查看完整回答
反对 回复 2023-03-16
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号