Как заменить или поменять местами все значения (самые большие с самыми маленькими) в python? - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу поменять местами все значения моего фрейма данных. Самое большое значение должно быть заменено наименьшим значением (т.е. 7 с 1, 6 с 2, 5 с 3, 4 с 4, 3 с 5 и т. Д.).

import numpy as np
import pandas as pd
import io

data = '''
Values
6
1
3
7
5
2
4
1
4
7
2
5
'''
df = pd.read_csv(io.StringIO(data))

Trial

Сначала я хочу получить все уникальные значения из моих данных.

df1=df.Values.unique()
print(df1)
[6 1 3 7 5 2 4]

Я отсортировал их по возрастанию порядок:

sorted1 = list(np.sort(df1))
print(sorted1)
[1, 2, 3, 4, 5, 6, 7]

Чем я отсортировал список в обратном порядке:

rev_sorted = list(reversed(sorted1))
print(rev_sorted)
[7, 6, 5, 4, 3, 2, 1]

Теперь мне нужно заменить максимальное значение на минимальное и т. д. в моем основном наборе данных ( df). Старые значения можно заменить или добавить новый столбец.

Ожидаемый результат :

Values,New_Values
6,2
1,7
3,5
7,1
5,3
2,6
4,4
1,7
4,4
7,1
2,6
5,3

Ответы [ 2 ]

3 голосов
/ 29 апреля 2020

Вот векторизованный -

In [51]: m,n = np.unique(df['Values'], return_inverse=True)

In [52]: df['New_Values'] = m[n.max()-n]

In [53]: df
Out[53]: 
    Values  New_Values
0        6           2
1        1           7
2        3           5
3        7           1
4        5           3
5        2           6
6        4           4
7        1           7
8        4           4
9        7           1
10       2           6
11       5           3

Перевод на pandas с pandas.factorize -

m,n = pd.factorize(df.Values, sort=True)
df['New_Values'] = n[m.max()-m]
1 голос
/ 29 апреля 2020

Использовать Series.map от dictionary, созданных в отсортированных и обратных списках сортировки:

df['New'] = df['Values'].map(dict(zip(sorted1,rev_sorted)))
print (df)
    Values  New
0        6    2
1        1    7
2        3    5
3        7    1
4        5    3
5        2    6
6        4    4
7        1    7
8        4    4
9        7    1
10       2    6
11       5    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...