簡體   English   中英

在具有多列的 pandas DataFrame 中選擇最接近零的行中的值

[英]Selecting the value in a row closest to zero in a pandas DataFrame with multiple columns

這個問題是這個問題的延伸:在 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

你可以做agg

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

Output:

  min idxmin
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

Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM