熊猫GROUPBY和秩与1开始为每个组组内

问题描述 投票:2回答:1

我有一个数据帧:

进口大熊猫作为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

我想会议中的排名问题。我试着用:

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. 对于群组会话= 1,有三个问题和一个B的问题,所以对于组1,等级为a = 1和b = 2
  2. 用于群组会话= 2,两个行列是相等的,以便它们的等级应当相同= 1
  3. 对于群组会话= 3,有b的问题,其中一个问题,所以队伍应当B = 1和A = 2

不管怎样,为什么每个组的队伍不会从1日开始,2,3 ...?

python pandas group-by size rank
1个回答
4
投票

使用DataFrameGroupBy.rank通过MultiIndex的第一级(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
© www.soinside.com 2019 - 2024. All rights reserved.