在具有多列的pandas DataFrame中选择最接近零的行中的值



这个问题是这个问题的扩展:在pandas DataFrame 中选择最接近零的行中的值

但是将其扩展为包括多个列。这可以在一行中完成并添加它所来自的列名吗?

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(-15,15,size=(6,4)).reshape(6,4), columns=list('abcd'))

a      b      c      d
0   -2    -15     -5     -6
1   14     -3      5    -14
2   -5    -13      0     -5
3  -13      4    -10      6
4   13     -9      4      2
5   0      -7    -10      6

预期:

closest_to_0_a_b_c_d     column
0                     -2          a
1                     -3          b
2                      0          c
3                      4          b
4                      2          d 
5                      0          a

添加到@QuangHoang的答案中,您还可以使用lookup:返回负值

输入:

a   b   c   d
0   3   4 -14 -12
1  -6  -8  -9   8
2  12 -15   7   0
3  13  -7   2 -12
4 -14 -15  -7 -14
5  13 -11   1   9

输出:

df1 = df.abs().agg(['min','idxmin'], axis=1)
df1['min'] = df.lookup(df1.index, df1['idxmin'])
df1
Out[1]: 
min idxmin
0    3      a
1   -6      a
2    0      d
3    2      c
4   -7      c
5    1      c

并重命名列:

df1.columns = [f'closest_to_{"_".join(df.columns)}', 'column']
df1
Out[2]: 
closest_to_a_b_c_d column
0                   3      a
1                  -6      a
2                   0      d
3                   2      c
4                  -7      c
5                   1      c

您可以执行agg:

df.abs().agg(['min','idxmin'], axis=1)

输出:

min idxmin
0   2      a
1   3      b
2   0      c
3   4      b
4   2      d
5   0      a

最新更新