python - pandas rank 函数 2 列的高值和低值
问题描述
这里有一些代码来组成一个带有 2 列的 pandas 数据框,一列data
称为hours
. 该data
列是从 -150 到 250 的随机整数。该hours
列是从 0.5 到 15.5 的随机浮点数。
import random
import numpy as np
import pandas as pd
data = np.random.randint(-150,250,size=200)
df = pd.DataFrame(data, columns=['Data'])
#generate random floats for df2
randomFloatList = []
# Set a length of the list to length of pandas df1
for i in range(0, len(df)):
# any random float between 5.50 to 50.50
x = round(random.uniform(0.50, 15.50), 2)
randomFloatList.append(x)
df2 = pd.DataFrame(randomFloatList,columns=['hours'])
combined = df.join(df2)
print(combined)
回报:
Data hours
0 93 9.66
1 85 14.76
2 -82 12.55
3 -44 2.40
4 -1 13.86
Pandas rank 函数能否根据一列 ( data
) 中的最大值和不同列 ( ) 中的最小值重新组织数据帧hours
,并保留数据集中的行?希望这是有道理的......
如果我使用
print(combined.rank(axis='columns'))
这会返回一些不需要的东西,我无法弄清楚熊猫等级是否可能。
Data hours
0 2.0 1.0
1 2.0 1.0
2 1.0 2.0
3 1.0 2.0
4 1.0 2.0
非常感谢任何提示。
解决方案
因为 Pandas 使用internal aligning mechanism
基于索引,所以您的问题可能很难解决。但是,通过使用香草python list
,您可以完成排序工作,然后在数据框中分配相应的等级。如果我正确理解了您的问题。这是完成这项工作的代码:
combined['Data']=combined['Data'].sort_values(ascending=False).tolist()
combined['hours']=combined['hours'].sort_values().tolist()
combined['Data_rank'] = combined['Data'].rank()
combined['hours_rank'] = combined['hours'].rank()
输出:
Data hours Data_rank hours_rank
0 242 0.61 199.5 1.0
1 242 0.71 199.5 2.0
2 241 0.82 198.0 3.0
3 238 0.88 197.0 4.0
4 236 1.01 196.0 5.0
.. ... ... ... ...
195 -144 15.21 5.0 196.0
196 -145 15.22 4.0 197.0
197 -150 15.24 2.0 198.0
198 -150 15.34 2.0 199.0
199 -150 15.35 2.0 200.0
[200 rows x 4 columns]
推荐阅读
- c++ - valgrind:多个 std::vector::resize 调用
- linux - Linux内核中mm_struct中的“pgd”属性是物理地址还是虚拟地址?
- python - 在 Pandas 中迭代计算月数
- c++ - C++ [] 索引运算符重载
- android - OnTouchEvent时如何在Android中使用Animator播放一组图像
- python-3.x - 如何更改 GTK Notebook 标题背景颜色?
- java - DispatcherServlet 找不到 HTTP 请求的映射 URI
- json - Jenkins 中的 Groovy 解析 JSON
- javascript - 奇怪的行为 --- 弹出模式在背景图像中显示白色边框网格 onclick
- java - 我如何在java方法中传递不同的类