我有一个pd.Series
和标量值(浮点数和整数)的列表,我想查找其元素级最大值(系列都相同的长度)。如果有一个np.nan
值,则应使用另一个值(如果只有nan,则为np.nan
)。只要列表中的序列或值不包含nan值,此方法就可以正常工作,但是如果它们包含nan值,则nans会主导结果序列。
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值,如果有替代值,则忽略它们?
最佳答案
使用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