I have 3 methods to do some simple calculations. 2 methods are returning nd-array and 1 method returns 1d-array. Later, I am creating a pandas dataframe based on the return output from the methods.
While I am creating pandas dataframe, I am also calculating std from the method's result. For nd-array I need to use axis=0 and axis=1 to calculate std but for the 1d-array, I can not use the axis properties.
That means I need to use if-else to calculate std for different returns from the methods. Below code is working fine
def main_fn(arr_1):
all_result_summary = []
for method in ["met_1", "met2", "met_3"]:
results: ndarray = np.array(main_fn(list(arr_1), method))
if method == "met_3":
all_result_summary.append(
pd.DataFrame(
{
"Method": method,
"result": results.mean(),
"result_sd_ax_0": results.std(ddof=1),
"result_sd_ax_1": "NA",
},
index=[0],
)
)
else:
all_result_summary.append(
pd.DataFrame(
{
"Method": method,
"result": results.mean(),
"result_sd_ax_0": results.mean(axis=0).std(ddof=1),
"result_sd_ax_1": results.mean(axis=1).std(ddof=1),
},
index=[0],
)
)
summary = pd.concat(all_result_summary, axis=0, ignore_index=True)
return summary
However, I wanted to use a more pythonic way instead of reusing the whole code using if-else. Any other way to optimize the code?