猿问

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

我有以下数据框:


account_num   trans_cdi

1             c

1             d  

3             d

3             c

3             d

它是更大数据框的一部分。首先,我想对 account_num 列进行分组,然后删除组中 trans_cdi 列中以“d”开头的行。所以在这种情况下,新的数据框看起来像这样:


account_num   trans_cdi

1             c

1             d  

3             c

3             d

我那样试过,但它删除了整个组:


df = df.groupby("account_numb").filter(lambda x: x["trans_cdi"].iloc[0] != "d")

谢谢!


哆啦的时光机
浏览 134回答 2
2回答

跃然一笑

您可以先获取每组的行数,然后计算 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_cdi0            1         c1            1         d3            3         c4            3         d

三国纷争

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_cdi0            1         c1            1         d3            3         c4            3         d这会概括您的想法吗?
随时随地看视频慕课网APP

相关分类

Python
我要回答