我有 3 種方法來做一些簡單的計算。2 個方法正在回傳nd-array,1 個方法正在回傳1d-array。稍后,我將根據方法的回傳輸出創建一個 pandas 資料框。
在創建 pandas 資料框時,我也在根據std方法的結果進行計算。因為nd-array我需要使用axis=0andaxis=1來計算std,但是對于1d-array,我不能使用axis屬性。
這意味著我需要使用這些方法if-else計算std不同的回報。下面的代碼作業正常
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
但是,我想使用更 Pythonic 的方式,而不是使用if-else. 還有其他優化代碼的方法嗎?
uj5u.com熱心網友回復:
使用x if cond else y三元樣式的語法怎么樣?
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))
all_result_summary.append(
pd.DataFrame(
{
"Method": method,
"result": results.mean(),
"result_sd_ax_0": results.std(ddof=1) if method == "met_3" else results.mean(axis=0).std(ddof=1),
"result_sd_ax_1": "NA" if method == "met_3" else results.mean(axis=1).std(ddof=1),
},
index=[0],
)
)
summary = pd.concat(all_result_summary, axis=0, ignore_index=True)
return summary
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445130.html
標籤:Python python-3.x 熊猫
