我需要创建一个新列来根据以下条件识别单元格:1)当 TARGET 列上的单元格包含数字 1 时,2)当 TARGET 列上包含数字 1 的单元格后面是包含数字 1 的单元格时连续 6 个零。让我尝试举例说明,我有一张如下所示的表格:
CLI_CD | 目标 |
---|---|
3 | 1 |
3 | 1 |
3 | 1 |
3 | 0 |
3 | 0 |
3 | 0 |
3 | 0 |
3 | 0 |
3 | 0 |
3 | 0 |
我需要创建一个名为 OUTPUT 的新列,用于标识数字的转换,仅在满足条件时才分配值 TRUE,并且此分配需要在数字 1 最后一次出现时完成。该列的行为应如下所示:
CLI_CD | 目标 | 输出 |
---|---|---|
3 | 1 | 错误 |
3 | 1 | 错误 |
3 | 1 | 正确 |
3 | 0 | 错误 |
3 | 0 | 错误 |
3 | 0 | 错误 |
3 | 0 | 错误 |
3 | 0 | 错误 |
3 | 0 | 错误 |
3 | 0 | 错误 |
到目前为止我尝试过的看起来像这样:
def verify(df):
df['OUTPUT'] = ((df['TARGET'].rolling(6).sum()==0).shift(-6)) & (df['TARGET'].eq(1))
return df
df = df.groupby('CLI_CD').apply(verify)
尽管该解决方案有效,但我不确定它为什么有效,也不确定它是否是实施该解决方案的最佳方式。我想和你们核实一下是否有更有效甚至正确的方法来实现它。提前谢谢大家。
试试这个:
df['OUTPUT'] = False
df.loc[(df.TARGET != df.TARGET.shift(-1)), 'OUTPUT'] = True
df