在pandas DataFrame中选择最接近零的行中的值

时间:2016-02-18 17:49:03

标签: python pandas

我们有一个有两列的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,但我认为有更简单的方法吗?

3 个答案:

答案 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()