代码之家  ›  专栏  ›  技术社区  ›  orange

没有NPNN的标量和大熊猫系列的NP.最大值

  •  1
  • orange  · 技术社区  · 6 年前

    我有一个清单 pd.Series 和标量值(浮点和int),我想找到元素的最大值(级数都是相同的长度)。如果有 np.nan 值,应使用另一个值( 新南威尔士州 如果只有NAN可用)。只要列表中的一个或多个序列或值不包含NaN值,这就可以正常工作,但如果它们确实包含NaN值,则NaN将主导生成的序列。

    rv = input_list[0]
    for s in input_list[1:]:
      rv = np.maximum(s, rv)
    

    作为一个例子

    input_list = [pd.Series([1, 2, 3, 1]), 2, pd.Series([3, 1, np.nan, 4])]
    

    应返回:

    pd.Series([3, 2, 3, 4])
    

    如何修改此代码以处理NaN值,并在存在替代值时忽略它们?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Luca Cappelletti    6 年前

    解决方案使用 numpy.nanmax

    你在找 numpy.nanmax . 从其文件中:

    返回一个数组的最大值或最大值沿一个轴,忽略任何 南斯。当遇到所有的南片时 引发运行时警告 Nan回来吃那片。

    如果你知道这个系列的最大尺寸是 n :

    n= 4
    result = pd.Series(np.nanmax(
        [np.full(n, i) if np.isscalar(i) else i for i in input_list], axis=0))
    

    在示例中运行它:

    input_list = [pd.Series([1, 2, 3, 1]), 2, pd.Series([3, 1, np.nan, 4])]
    result = pd.Series(np.nanmax(
        [np.full(n, i) if np.isscalar(i) else i for i in input_list], axis=0))
    

    输出:

    0    3.0
    1    2.0
    2    3.0
    3    4.0
    dtype: float64