标量和熊猫系列的np.maximum,无np.nan

时间:2018-07-15 05:58:01

标签: python pandas numpy

我有一个pd.Series和标量值(浮点型和整型)的列表,我想找到其元素级最大值(系列都相同的长度)。如果有一个np.nan值,则应该使用另一个值(如果只有nan可用,则np.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 个答案:

答案 0 :(得分:1)

使用numpy.nanmax

的解决方案

您正在寻找numpy.nanmax。从其文档中:

  

返回数组的最大值或沿轴的最大值,而忽略任何   NaNs。遇到所有NaN片时,会发出 RuntimeWarning   并为该切片返回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