我需要根据 pandas 数据帧的条件确定一系列二进制数何时转换

问题描述 投票:0回答:1

我需要创建一个新列来根据以下条件识别单元格: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)

尽管该解决方案有效,但我不确定它为什么有效,也不确定它是否是实施该解决方案的最佳方式。我想和你们核实一下是否有更有效甚至正确的方法来实现它。提前谢谢大家。

python pandas dataframe conditional-statements
1个回答
0
投票

试试这个:

df['OUTPUT'] = False
df.loc[(df.TARGET != df.TARGET.shift(-1)), 'OUTPUT'] = True
df
© www.soinside.com 2019 - 2024. All rights reserved.