Как именно 'abs ()' и 'argsort ()' работают вместе - PullRequest
0 голосов
/ 03 января 2019
#Creating DataFrame
df=pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}); df

вывод:

    AAA  BBB  CCC
0    4   10  100
1    5   20   50
2    6   30  -30
3    7   40  -50

aValue = 43.0

df.loc[(df.CCC-aValue).abs().argsort()]

вывод:

   AAA  BBB  CCC
1    5   20   50
0    4   10  100
2    6   30  -30
3    7   40  -50

Вывод сбивает с толку, можете ли вы, пожалуйстаобъясните подробно, как работает строка ниже

df.loc[(df.CCC-aValue).abs().argsort()]

Ответы [ 2 ]

0 голосов
/ 03 января 2019

С abs отображением отрицательных значений и смещением значений вычитания трудно представить, что происходит. Вместо этого мне нужно вычислить это шаг за шагом:

In [97]: x = np.array([100,50,-30,-50])
In [98]: x-43
Out[98]: array([ 57,   7, -73, -93])
In [99]: abs(x-43)
Out[99]: array([57,  7, 73, 93])
In [100]: np.argsort(abs(x-43))
Out[100]: array([1, 0, 2, 3])
In [101]: x[np.argsort(abs(x-43))]
Out[101]: array([ 50, 100, -30, -50])

argsort - индексирование, которое помещает элементы в отсортированном порядке. Мы можем видеть это с:

In [104]: Out[99][Out[100]]
Out[104]: array([ 7, 57, 73, 93])

или

In [105]: np.array([57, 7, 73, 93])[[1, 0, 2, 3]]
Out[105]: array([ 7, 57, 73, 93])

How they work together определяется синтаксисом Python; это прямо вперед.

0 голосов
/ 03 января 2019

(df.CCC-aValue).abs() будет принимать абсолютное значение df.CCC-aValue, а argsort будет сортировать значения и принимать отсортированные индексы, а df.loc покажет строки с отсортированными индексами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...