我们有一个有两列的panda DataFrame
:
pd.DataFrame(pd.np.arange(12).reshape(6,2), columns=list('ab')) % 3 - 1.2
a b
0 -1.2 -0.2
1 0.8 -1.2
2 -0.2 0.8
3 -1.2 -0.2
4 0.8 -1.2
5 -0.2 0.8
获得最接近零的值的最佳方法是什么?上述的预期输出将是
x
0 -0.2
1 0.8
2 -0.2
3 -0.2
4 0.8
5 -0.2
我尝试使用df.idxmin(axis=1)
,然后使用lookup
,但我认为有更简单的方法吗?
答案 0 :(得分:2)
只需使用“a”或“b”中的值进行选择
df['a'].where(df['a'].abs() < df['b'].abs(), df['b'])
您可以添加列名称最接近零的列,然后使用它来选择最接近的值。
(df.assign(closest=df.apply(lambda x: x.abs().argmin(), axis='columns'))
.apply(lambda x: x[x['closest']], axis='columns'))
它看起来还是比它应该更麻烦吗?
答案 1 :(得分:0)
一个选项:
df = pd.DataFrame(pd.np.arange(12).reshape(6,2), columns=list('ab')) % 3 - 1.2
closest_to_zero = df.abs().idxmin(axis=1).pipe(lambda x: x[x.notnull()])
pd.Series(df.lookup(closest_to_zero.index, closest_to_zero), index=closest_to_zero.index).reindex(df.index)
答案 2 :(得分:0)
以下对我有用,给你最接近零的值:
df.abs().min()