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

标签 python pandas dataframe rows

我正在处理 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/

相关文章:

python - 从 pandas 的 2 个数据框中添加 2 列

python - 无法使用 cgi.FieldStorage 获取 POST 值

python - 通过 Python 列表过滤以查找常见元素

python - Pandas - 将两个数据帧中最近的事件与条件连接起来

r - 如何根据某些列删除重复行(较短的行)?

r - 如何在 R 中的整个数据帧上使用正则表达式

javascript - 用 JS 打开新窗口 - 但里面有 MEDIA_URL - 如何?

pandas - 根据条件合并两个数据框并获取id

python - 合并两个数据帧以模仿 'select * from tablea, tableb'

python - Pandas - 使用数据框值作为字符串填充列表