Pandas dataframe 和 apply - 无法弄清楚为什么结果值为负
Pandas dataframe and apply - Can't figure out why resulting values are negative
这是我的数据的图片,感兴趣的列 RUL 在最右边,名字被截断了(我使用的是 NASA 的涡轮发动机退化数据集)可以在这里找到:https://data.nasa.gov/widgets/vrks-gjie
我在 Azure ML Studio 中执行此操作,但下面的代码片段,我有 2 个辅助函数 get_engine_last_cycle(当我进行单元测试时,它似乎按预期执行 - 计算该引擎的最后一个周期,例如,当引擎 2 失败时,此数据集中的最大循环次数为 287)。我调用的最终辅助函数 get_engine_remainig_life,将引擎和循环作为参数,return 是最大循环 - 该引擎的当前循环(我再次对此进行了单元测试,它似乎给了我预期结果)。
出于某种原因,当我 运行 我的笔记本时,这不起作用。我称为 "RUL" 的列应该 return 一系列递减的正整数,例如 2 号引擎的 287、286、285 284 等。但是,它给了我负值。我似乎无法弄清楚为什么,但知道这一段代码可能存在问题
df['RUL'] = df[['engine', 'cycle']].apply(lambda x: get_engine_remaining_life(*x), axis=1)
def get_engine_last_cycle(engine):
return int(df.loc[engine, ['cycle']].max())
def get_engine_remaining_life(engine, cycle):
return get_engine_last_cycle(engine) - int(cycle)
df['RUL'] = df[['engine', 'cycle']].apply(lambda x: get_engine_remaining_life(*x), axis=1)
return df
只是为了尝试,这就是我实现它的方式。或许对你有帮助。
df['RUL'] = df.loc[:, ['engine', 'cycle']].groupby('engine').transform('max')
df['RUL'] = df['RUL'] - df['cycle']
这是我的数据的图片,感兴趣的列 RUL 在最右边,名字被截断了(我使用的是 NASA 的涡轮发动机退化数据集)可以在这里找到:https://data.nasa.gov/widgets/vrks-gjie
我在 Azure ML Studio 中执行此操作,但下面的代码片段,我有 2 个辅助函数 get_engine_last_cycle(当我进行单元测试时,它似乎按预期执行 - 计算该引擎的最后一个周期,例如,当引擎 2 失败时,此数据集中的最大循环次数为 287)。我调用的最终辅助函数 get_engine_remainig_life,将引擎和循环作为参数,return 是最大循环 - 该引擎的当前循环(我再次对此进行了单元测试,它似乎给了我预期结果)。
出于某种原因,当我 运行 我的笔记本时,这不起作用。我称为 "RUL" 的列应该 return 一系列递减的正整数,例如 2 号引擎的 287、286、285 284 等。但是,它给了我负值。我似乎无法弄清楚为什么,但知道这一段代码可能存在问题
df['RUL'] = df[['engine', 'cycle']].apply(lambda x: get_engine_remaining_life(*x), axis=1)
def get_engine_last_cycle(engine):
return int(df.loc[engine, ['cycle']].max())
def get_engine_remaining_life(engine, cycle):
return get_engine_last_cycle(engine) - int(cycle)
df['RUL'] = df[['engine', 'cycle']].apply(lambda x: get_engine_remaining_life(*x), axis=1)
return df
只是为了尝试,这就是我实现它的方式。或许对你有帮助。
df['RUL'] = df.loc[:, ['engine', 'cycle']].groupby('engine').transform('max')
df['RUL'] = df['RUL'] - df['cycle']