一旦列中的条件满足,请删除n行,然后转到下一节

2024-10-01 02:26:00 发布

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

我有一个数据帧df = pd.DataFrame({'col1': [.8,.9,1,1,1,.9,.7,.9,1,1,.8,.8,.9]}),它看起来像

  col1
0   0.8
1   0.9
2   1.0
3   1.0
4   1.0
5   0.9
6   0.7
7   0.9
8   1.0
9   1.0
10  0.8
11  0.8
12  0.9

一旦1位于col1中,我希望代码删除下面的三个数字。它应该去掉三个,然后看看下面是否有1。输出应该像

  col1
0   0.8
1   0.9
2   1.0
6   0.7
7   0.9
8   1.0
12  0.9

我先前问了一个问题,答案是

integers = np.r_[: df.twofour.eq(1).idxmax() + 1, 
             range(df.twofour.eq(1).idxmax() + 30, len(df))
            ]

df = df.iloc[integers]

这段代码可以删除1的第一个目的,我可以为所有未删除的1扩展这段代码吗?还有更优雅的方法吗


Tags: 数据integers答案代码dataframedflennp
1条回答
网友
1楼 · 发布于 2024-10-01 02:26:00

您只需迭代数据帧并获取所有要删除的索引:

index_to_delete = []
for row in df.itertuples():
    idx = row[0]
    value = row.col1
    if value == 1 and idx not in index_to_delete:
        index_to_delete += [idx+1, idx+2, idx+3]

df = df.loc[~df.index.isin(index_to_delete)]
print(df)

输出:

    col1
0   0.8
1   0.9
2   1.0
6   0.7
7   0.9
8   1.0
12  0.9

相关问题 更多 >