我有以下两个 pandas 时间序列(但问题也适用于 numpy 数组):
NaN NaN
NaN 2
NaN 1
NaN 0
NaN -1
NaN -2
6 -3
5 -4
4 -5
3 NaN
2 NaN
我想通过以下方式组合这两列。如果两列都包含 NaN
,则结果列将获取 NaN
,否则我们将获得绝对值最小的值。
例如,在所考虑的情况下,我们应该得到:
NaN
2
1
0
-1
-2
-3
-4
4
3
2
最佳答案
让 df
具有两列的数据框,使用 axis=1
在行上应用条件绝对最小值
这里,x[np.argmin(x.abs())]
检查绝对最小值的行索引,并返回带符号的原始值。
此外,我们还需要pd.isnull(x.min())
检查'遇到的All-NaN切片
,即当两列都有NaN时
值。
In [3]: df.apply(lambda x: x.min() if pd.isnull(x.min()) else
x[np.argmin(x.abs())], axis=1)
Out[3]:
0 NaN
1 2
2 1
3 0
4 -1
5 -2
6 -3
7 -4
8 4
9 3
10 2
dtype: float64
关于python - 如何在忽略 NaN 的多个列中查找绝对值最小的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797261/