pandas groupby 并在每组以 1 开头的组内排名

use*_*309 5 python size group-by rank pandas

我有一个数据框:

将 pandas 导入为 pd

df = pd.DataFrame([[1, 'a'],
                    [1, 'a'],
                    [1, 'b'],
                    [1, 'a'],
                    [2, 'a'],
                    [2, 'b'],
                    [2, 'a'],
                    [2, 'b'],
                    [3, 'b'],
                    [3, 'a'],
                    [3, 'b'],

                   ], columns=['session', 'issue'])
df
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想对会议中的问题进行排名。我尝试过:

df.groupby(['session', 'issue']).size().rank(ascending=False, method='dense')

session  issue
1        a        1.0
         b        3.0
2        a        2.0
         b        2.0
3        a        3.0
         b        2.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我需要的是这样的结果:

  1. 对于组会话 = 1,有 3 个 a 问题和 1 个 b 问题,因此对于组 1,排名为 a = 1 和 b = 2
  2. 对于组会话=2,两个等级相等,因此它们的等级应该相同= 1
  3. 对于小组会议=3,有 b 个问题和 a 问题,因此排名应为 b=1 和 a=2

无论如何,为什么每个组的排名不从 1、2、3... 开始?

jez*_*ael 5

( )DataFrameGroupBy.rank的第一级使用:MultiIndexsession

s = (df.groupby(['session', 'issue'])
        .size()
        .groupby(level=0)
        .rank(ascending=False, method='dense'))
print (s)
session  issue
1        a        1.0
         b        2.0
2        a        1.0
         b        1.0
3        a        2.0
         b        1.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)