如何回头看高几行以查看是否满足条件,然后相应地替换单元格

How to look back a few rows higher to see if a condition is satisfied and then replace a cell accordingly

我有一个数据框,如果满足条件,它会在上面的几行中查找带有另一个字符串的特定行,然后将其自身替换为具有该字符串的整个单元格。

这是一个例子:

如果在类型列中检测到 "test",它会在上方 3 行中查找包含字符串 "Subject" 的行。如果满足该条件,它会将其单元格名称更改为它找到的整个单元格。

数据为:

Type    Score
Ignore  Ignore
Subject_English NA
test    58
test    6
test    87
Subject_science NA
test    23
test    47
test    89
test    45
test    23
ignore  ignore
ignore  ignore
ignore  ignore
test    54
Subject_Math    NA
Ignore  ignore
Ignore  ignore
test    88

最后,如果多行满足初始条件,则取最新的。其次,一旦更改了一个单元格,就可以使用该单元格来满足另一个单元格的第一个条件。 第三,在 "test" 行和我希望满足我需要忽略的条件的行之间可能有几行。 进一步说明: 测试的数量可能会有所不同,可能是 3 或 10。您可以在主题之间忽略。如果可能的话,我想添加一个阈值,如果最后 10 行中没有主题,则将其保留为测试

How to look back a few rows higher to see if a condition is satisfied and then replace a cell accordingly

尝试"look back"当然是可能的,但它增加了很多复杂性。相反,从上到下遍历行。每当您遇到值以 "Subject" 开头的单元格时,请将变量 current_subject 设置为该值。每当遇到值为 "test" 的单元格时,将该单元格的值设置为 current_subject.

中的值

I'd like to add a threshold that if there wasn't a subject in the last 10 rows, then leave it as test

好的,创建另一个名为 nonsubject_rows 的变量。每当遇到主题行时都将其设置为 0,也许当您将测试行设置为当前主题时也将其设置为 0;否则,为您访问的每一行增加它。在设置测试行的值之前,请检查 nonsubject_rows 是否大于阈值;如果是,请不要更改行。

简而言之,您可以跟踪处理每一行所需的信息。这将比每次需要时都搜索信息更简单、更快捷。