python - 如何在忽略 NaN 的多个列中查找绝对值最小的值?

标签 python numpy pandas

我有以下两个 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/

相关文章:

python - 使用 pandas 应用多个 boolean 掩码以设置列中的值的有效方法

python - 使用 pandas 数据框的 .loc 函数

python 3 : eval() with custom dict not evaluating numbers

python - 矢量化 numpy 追加循环

python pandas 时间序列选择一年中的某一天

python - 使用嵌套 for 和 if 循环时加快 Python 速度

javascript - 在 django 中显示图像

python - 有没有一种简单的方法可以将 ISO 8601 持续时间转换为 timedelta?

python - 在 CSV 文件中写入和读取 float 和字符串 - python

python - Pandas :每n行的累积总和