【问题标题】:How to rank data, but give the same ranking for data that is equal如何对数据进行排名,但对相等的数据给出相同的排名
【发布时间】:2018-12-03 23:56:27
【问题描述】:

我有一个每日最高温度的 csv。我正在尝试为我的数据分配一个“等级”。我首先将我的每日最高温度从最低到最高排序。然后我创建了一个名为 rank 的新列。

#Sort data smallest to largest
ValidFullData_Sorted=ValidFullData.sort_values(by="TMAX")
#count total obs
n=ValidFullData_Sorted.shape[0]
#add a numbered column 1-> n to use in return calculation for rank
ValidFullData_Sorted.insert(0,'rank',range(1,1+n))

对于相同的每日最高温度值,如何使排名相同? (即每天最高温度达到 95° 时,每个实例的排名应该相同)

这里是一些示例数据:(它的每日温度数据,所以它有数千行)

Date    TMAX  TMIN
1/1/00  22    11
1/2/00  26    12
1/3/00  29    14
1/4/00  42    7
1/5/00  42    21

我想添加一个 TMAXrank 列,如下所示:

Date    TMAX  TMIN  TMAXRank
1/1/00  22    11    4
1/2/00  26    12    3
1/3/00  29    14    2
1/4/00  42    7     1
1/5/00  42    21    1

【问题讨论】:

  • 温度本身就是所有意图和目的的排名?
  • 查看 pandas DataFrame.rankSeries.rank 方法
  • 看看这是不是helpful。如果您只使用文件并且知道值 >95 F 的排名落在哪里,您可以使用 if then 语句手动分配排名。不看数据有点棘手。
  • @roganjosh 我需要实际排名,因为我想查看概率
  • @KenDekalb 不幸的是我不知道他们在哪里

标签: python pandas csv rank


【解决方案1】:
ValidFullData['TMAXRank'] = ValidFullData[ValidFullData['TMAX'] < 95]['TMAX'].rank(ascending=False, method='dense')

输出:

    Unnamed: 0  TMAX  TMIN  TMAXRank
17          17    88    14       1.0
16          16    76    12       2.0
15          15    72    11       3.0
14          14    64    21       4.0
8            8    62     7       5.0
7            7    58    14       6.0
13          13    58     7       6.0
18          18    55     7       7.0
3            3    42     7       8.0
4            4    42    21       8.0
6            6    41    12       9.0
12          12    37    14      10.0
5            5    36    11      11.0
2            2    29    14      12.0
1            1    26    12      13.0
0            0    22    11      14.0
9            9    98    21       NaN
10          10   112    11       NaN
11          11    98    12       NaN
19          19    95    21       NaN

【讨论】:

  • 这是一个有效的答案吗?当温度值大于 95 F 时,它不会为行分配相同的排名。
  • @KenDekalb 不确定您的意思。请参阅我上面的编辑。在这两种情况下,它都将 98 列为 2。
  • @KenDekalb 啊,我没有在问题中看到这一点。我已经编辑了我的答案以适应。
猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多