python - 如何替换或交换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
解决方案
这是一个矢量化的 -
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]
推荐阅读
- php - Doctrine ORM - 如何在选择查询中选择第一个选定的项目
- javascript - 如何从 GridLayer 制作交互式 Leaflet Tiles
- excel - 如何用vba删除一个txt文件的内容?
- javascript - 云功能中未定义的用户名?
- apache-pig - 使用问号的多重 if else
- django - 使用 nginx + gunicorn 服务在 django 部署中未显示媒体
- javascript - 函数 setGradient
- c - 使用 Inet_aton 接受命令行参数错误
- python-2.7 - Urllib2 通过代理和信任不受信任的 SSL 证书
- hyperledger-fabric - 在 Hyperledger Fabric 中,如何在部署时保持链代码(源代码)私有?