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

标签 python pandas group-by size rank

我有一个数据框:

将 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

enter image description here

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

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

我需要的是这样的结果:

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

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

最佳答案

使用DataFrameGroupBy.rankMultiIndex 的第一级(session):

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

关于python - pandas groupby 并在每组以 1 开头的组内排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54530503/

相关文章:

python - Pandas to_datetime() 没有检测到列

python - 在Python中连接/组合相似的列

python - 通过 pd.TimeGrouper ('D' 按天聚合每小时时间序列;问题@时间戳00 :00:00 (hour 24)

Python/Django : Selecting max value of one-to-many relation and displaying it in HTML/View

python - 使用python中的rawpy模块将原始图像转换为tiff

python - 在 python 中使用 resample ('W' ),sum() 进行基于自定义周期的重采样时出错

python - 如何高效地实现这种差分运算呢?

python - Pandas 如何在数据帧列中过滤具有特定范围数字的数据帧

mysql - 使用前缀和总和连接表

mysql - 我们可以使用列的 order by 而不使用该列的 group by 来编写 oracle 查询吗