我必须手动更正一些数据,否则可能会误导模型。你知道吗
逻辑是:
if col("a") not empty & col("b") negative
=> create col("ret_a") = 2*min(col("a")) - col("a")
else col("ret_a") = col("a")
我正在使用的代码是:
# a
df["ret_a"] = np.where(
np.logical_and(pd.notnull(df["a"]), df["b"] < 0),
2*df["a"].min()- df["a"],
df["a"])
问题是我有很多条件。。。我认为像“<;0”这样的条件不能存储在dict{}中使用局部放电图()
然后我试着用以下方法构建一些东西:
df['i'] = np.select(conditions, choices,)
使用“i”“条件”和“选项”:
i= [
'RETURN_COM_EQY_', # a
'INTEREST_COVERAGE_RATIO_', # b
'TOT_DEBT_TO_TOT_CAP_', # c
'TOT_DEBT_TO_TOT_EQY_', # d
'NET_DEBT_TO_EBITDA_', # e
'NET_INTEREST_COVERAGE_'] # f
conditions = [
(df['TOTAL_EQUITY_'] < 0), # a
(df['IS_INT_EXPENSE_'] < 0), # b
(df['NET_DEBT_'] < 0), # c
(df['NET_DEBT_'] < 0), # d
(df['NET_DEBT_'] < 0), # e1
(df['EBIT_'] < 0), # e2
(df['IS_INT_EXPENSE_'] < 0)] # f
choices = [
2*df["RETURN_COM_EQY_"].min() - df["RETURN_COM_EQY_"], # a
2*df["INTEREST_COVERAGE_RATIO_"].min() - df["INTEREST_COVERAGE_RATIO_"], # b
2*df["TOT_DEBT_TO_TOT_CAP_"].max() - df["TOT_DEBT_TO_TOT_CAP_"], # c
2*df["TOT_DEBT_TO_TOT_EQY_"].max() - df["TOT_DEBT_TO_TOT_EQY_"], # d
2*df["NET_DEBT_TO_EBITDA_"].max() - df["NET_DEBT_TO_EBITDA_"], # e1
2*df["NET_DEBT_TO_EBITDA_"].min() - df["NET_DEBT_TO_EBITDA_"], # e2
2*df["NET_INTEREST_COVERAGE_"].min() - df["NET_INTEREST_COVERAGE_"], # f
]
该操作的完整代码为:
# a
df["ret_mean_RETURN_COM_EQY_"] = np.where(
np.logical_and(pd.notnull(df["mean_RETURN_COM_EQY_"]),
df["mean_TOTAL_EQUITY_"] < 0),
2*df["mean_RETURN_COM_EQY_"].min()
- df["mean_RETURN_COM_EQY_"],
df["mean_RETURN_COM_EQY_"])
# b
df["ret_mean_INTEREST_COVERAGE_RATIO_"] = np.where(
np.logical_and(pd.notnull(df["mean_INTEREST_COVERAGE_RATIO_"]),
df["mean_IS_INT_EXPENSE_"] < 0),
2*df["mean_INTEREST_COVERAGE_RATIO_"].min()
- df["mean_INTEREST_COVERAGE_RATIO_"],
df["mean_INTEREST_COVERAGE_RATIO_"])
# c
df["ret_mean_TOT_DEBT_TO_TOT_CAP_"] = np.where(
np.logical_and(pd.notnull(df["mean_TOT_DEBT_TO_TOT_CAP_"]),
df["mean_NET_DEBT_"] < 0),
2*df["mean_TOT_DEBT_TO_TOT_CAP_"].max()
- df["mean_TOT_DEBT_TO_TOT_CAP_"],
df["mean_TOT_DEBT_TO_TOT_CAP_"])
# d
df["ret_mean_TOT_DEBT_TO_TOT_EQY_"] = np.where(
np.logical_and(pd.notnull(df["mean_TOT_DEBT_TO_TOT_EQY_"]),
df["mean_NET_DEBT_"] < 0),
2*df["mean_TOT_DEBT_TO_TOT_EQY_"].max()
- df["mean_TOT_DEBT_TO_TOT_EQY_"],
df["mean_TOT_DEBT_TO_TOT_EQY_"])
# e1
df["ret_mean_NET_DEBT_TO_EBITDA_"] = np.where(
np.logical_and(pd.notnull(df["mean_NET_DEBT_TO_EBITDA_"]),
df["mean_NET_DEBT_"] < 0),
2*df["mean_NET_DEBT_TO_EBITDA_"].max()
- df["mean_NET_DEBT_TO_EBITDA_"],
df["mean_NET_DEBT_TO_EBITDA_"])
# e2
df["ret_mean_NET_DEBT_TO_EBITDA_"] = np.where(
np.logical_and(pd.notnull(df["mean_NET_DEBT_TO_EBITDA_"]),
df["mean_EBIT_"] < 0),
2*df["mean_NET_DEBT_TO_EBITDA_"].min()
- df["mean_NET_DEBT_TO_EBITDA_"],
df["ret_mean_NET_DEBT_TO_EBITDA_"]) # different here
# f
df["ret_mean_NET_INTEREST_COVERAGE_"] = np.where(
np.logical_and(pd.notnull(df["mean_NET_INTEREST_COVERAGE_"]),
df["mean_IS_INT_EXPENSE_"] < 0),
2*df["mean_NET_INTEREST_COVERAGE_"].min()
- df["mean_NET_INTEREST_COVERAGE_"],
df["mean_NET_INTEREST_COVERAGE_"])
此功能应完成以下工作:
相关问题 更多 >
编程相关推荐