Py学习  »  Python

基于nd数组和1d数组的if-else条件创建数据帧的Pythonic方法

Opps_0 • 3 年前 • 1589 次点击  

我有三种方法来做一些简单的计算。2种方法正在回归 nd-array 1方法返回 1d-array .稍后,我将基于这些方法的返回输出创建一个pandas数据帧。

在创建熊猫数据框架的同时,我也在计算 std 根据方法的结果。对于 nd阵列 我需要使用 axis=0 axis=1 算计 性病 但是对于 一维阵列 ,我不能使用 axis 财产。

这意味着我需要使用 if-else 算计 性病 对于不同的方法返回。下面的代码运行良好

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

然而,我想使用一种更具Python风格的方式,而不是使用 否则 .还有其他优化代码的方法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129063
文章 [ 1 ]  |  最新文章 3 年前
richardec
Reply   •   1 楼
richardec    3 年前

使用如何 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