首页 > 解决方案 > 如何替换或交换python中的所有值(最大和最小)?

问题描述

我想交换我的数据框的所有值。必须用最小值替换最大值(即 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))

审判

首先,我想从我的数据中获取所有唯一值。

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

标签: pythonpandasnumpy

解决方案


这是一个矢量化的 -

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.factorize-

m,n = pd.factorize(df.Values, sort=True)
df['New_Values'] = n[m.max()-m]

推荐阅读