如何从pandas数据框中删除特定行?

2024-05-21 18:44:45 发布

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

我正在处理如下所示的熊猫数据帧。

    id          x1          y1
 0  2           some_val    some_val
 1  2           some_val    some_val
 2  2           some_val    some_val
 3  2           some_val    some_val
 4  2           some_val    some_val
 5  0           0           0 
 6  3           some_val    some_val
 7  3           some_val    some_val
 8  0           0           0 
 9  5           some_val    some_val
10  5           some_val    some_val
11  5           some_val    some_val
12  0           0           0
13  6           some_val    some_val
14  6           some_val    some_val
15  6           some_val    some_val
16  6           some_val    some_val

我的原始数据帧是没有所有“0”值的行的数据帧。根据项目需求,每当“id”更改时,我必须插入值为0的行。

现在我要删除任何“id”的所有行,它有3行且少于3行。从上面的数据框中,我想删除id-“3”和“5”的所有行。我的结果数据帧应该如下所示:

^{pr2}$

请给我一个获得这个结果的方法。


Tags: 数据项目方法id原始数据valsomex1
3条回答

最简单的答案是删除零行,因为如果有超过3行,它们可能会妨碍计算。然后分组。然后过滤。然后像你在其他问题/答案中那样加上0

d1 = df.query('ProjID != 0').groupby('ProjID').filter(lambda df: len(df) > 3)
d1

    ProjID     Xcoord    Ycoord
0        2  -7.863509  5.221327
1        2   some_val  some_val
2        2   some_val  some_val
3        2   some_val  some_val
4        2   some_val  some_val
13       6   some_val  some_val
14       6   some_val  some_val
15       6   some_val  some_val
16       6   some_val  some_val

然后再加回去

^{pr2}$

假设您的数据帧名为df,则需要执行以下操作:

df = df[df['col'<>=condition]] 

具体到你的情况:

^{pr2}$

与5相同。为了提高效率,您可以将这两个过滤器与“和”结合使用。在

这称为数据帧索引过滤器。在

您可以使用groupby过滤count小于3的id,并使用结果列表来索引df。在

filtered = df.groupby('ProjID').Xcoord.filter(lambda x: x.count() > 3)
df.iloc[filtered.index.tolist()]


    ProjID  Xcoord  Ycoord
0   2   -7.863509   5.221327
1   2   some_val    some_val
2   2   some_val    some_val
3   2   some_val    some_val
4   2   some_val    some_val
13  6   some_val    some_val
14  6   some_val    some_val
15  6   some_val    some_val
16  6   some_val    some_val

相关问题 更多 >