gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:09:43 25 4
gpt4 key购买 nike

我正在处理 pandas 数据框,如下所示。

    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 的行。

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

   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 6 some_val some_val
7 6 some_val some_val
8 6 some_val some_val
9 6 some_val some_val

请建议我一种获得此结果的方法。

最佳答案

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

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

然后添加回来

pidv = d1.ProjID.values
pid_chg = np.append(pidv[:-1] != pidv[1:], True)

i = d1.index.repeat(pid_chg + 1)

d2 = d1.loc[i, :].copy()

d2.loc[i.duplicated()] = 0

d2.reset_index(drop=True)

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
5 0 0 0
6 6 some_val some_val
7 6 some_val some_val
8 6 some_val some_val
9 6 some_val some_val
10 0 0 0

关于python - 如何从 pandas 数据框中删除特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985019/

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