首页 > 解决方案 > 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

非常感谢任何提示。

标签: pythonpandas

解决方案


因为 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]


推荐阅读