Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要统一的并列排名在熊猫栏_Python_Pandas - Fatal编程技术网

Python 需要统一的并列排名在熊猫栏

Python 需要统一的并列排名在熊猫栏,python,pandas,Python,Pandas,我对熊猫还不太熟悉。我有一个如下所示的数据帧: In [47]: print(d1) date name sector value 0 2014-10-31 A Information Tech -3.18229 1 2014-10-31 B Industrials -52.1333 2 2014-10-31 C Consumer Discret 45.3428 3 2014-10-31 D

我对熊猫还不太熟悉。我有一个如下所示的数据帧:

In [47]: print(d1)
         date name            sector     value
0  2014-10-31    A  Information Tech  -3.18229
1  2014-10-31    B       Industrials  -52.1333
2  2014-10-31    C  Consumer Discret   45.3428
3  2014-10-31    D       Industrials   -4.4901
4  2014-10-31    E       Industrials   6.85653
5  2014-10-31    F  Information Tech   4.56422
6  2014-10-31    H  Information Tech  29.31419
7  2014-10-31    G  Information Tech   6.52422
8  2014-10-31    I            Sports  16.52422
9  2014-10-31    J            Sports   2.62176
用例是,对于记录的某一天,我需要对列进行统一排序。排名应始终介于1到6之间,与记录数无关。如果平局,我需要给出这些记录的平均排名

为简单起见,我将总的_行保持在上面的10行,实际上,每个日期的总行数都要高得多(在数千行范围内)。排名范围从1到100

输出可以如下所示:

         date name            sector     value  rank
0  2014-10-31    A  Information Tech  -3.18229  5
1  2014-10-31    B       Industrials  -52.1333  6
2  2014-10-31    C  Consumer Discret   45.3428  1
3  2014-10-31    D       Industrials   -4.4901  5
4  2014-10-31    E       Industrials   6.85653  3
5  2014-10-31    F  Information Tech   4.56422  3
6  2014-10-31    H  Information Tech  29.31419  1
7  2014-10-31    G  Information Tech   6.52422  3
8  2014-10-31    I            Sports  16.52422  2
9  2014-10-31    J            Sports   2.62176  4 

提供统一军衔的最佳方式是什么?我试着搜索了很多,没有找到任何有用的东西

您可以尝试使用
pd.qcut

df['rank'] = pd.qcut(df['value'], 6, [*'654321'])

输出:

             date name            sector     value rank
0 2014-10-31         A  Information Tech  -3.18229    5
1 2014-10-31         B       Industrials -52.13330    6
2 2014-10-31         C  Consumer Discret  45.34280    1
3 2014-10-31         D       Industrials  -4.49010    6
4 2014-10-31         E       Industrials   6.85653    3
5 2014-10-31         F  Information Tech   4.56422    4
6 2014-10-31         H  Information Tech  29.31419    1
7 2014-10-31         G  Information Tech   6.52422    3
8 2014-10-31         I            Sports  16.52422    2
9 2014-10-31         J            Sports   2.62176    5

因此,我能够为我的用例找到合适的解决方案。 我使用
cut
函数和
rank
函数

df['rank'] = pd.cut(df['value'], 100, labels = list(range(1,101)))

秩是随机数还是
值的某个函数
?如果是我在上面共享的DF,秩应该始终在1到6之间。由于“*”处的语法错误,您的命令失败。所以,我把它拿走了。然后,它无法说明,
箱子标签必须比我在这里使用的箱子边缘数少一个
这可能是版本问题,请将[*'654321']替换为['6'、'5'、'4',3'、'2'、'1']
pd.qcut(df['value'],6,标签=['6','5','4','3','2','1'])
yes,看起来版本有所不同。我使用的是pandas 0.23.4您使用的是什么版本的python?我使用的是python 3.5.2
df['rank'] = pd.cut(df['value'], 100, labels = list(range(1,101)))