gpt4 book ai didi

python - 没有 np.nan 的标量和 pandas 系列的 np.maximum

转载 作者:行者123 更新时间:2023-12-01 09:15:02 25 4
gpt4 key购买 nike

我有一个 pd.Series 和标量值( float 和整数)的列表,我想找到它们的元素最大值(系列的长度都相同)。如果存在 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 值并在存在替代值时忽略它们?

最佳答案

使用numpy.nanmax的解决方案

您正在寻找numpy.nanmax 。来自其文档:

Return the maximum of an array or maximum along an axis, ignoring any NaNs. When all-NaN slices are encountered a RuntimeWarning is raised and NaN is returned for that slice.

因此,如果您知道该系列的最大尺寸为 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

关于python - 没有 np.nan 的标量和 pandas 系列的 np.maximum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com