我有一个数据框:
将 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
我想对 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
我需要的是这样的结果:
- 对于小组 session =1,有 3 个 a 问题和 1 个 b 问题,因此 对于组 1,排名为 a = 1 和 b = 2
- 对于群组 session =2,两个排名相等,因此它们的排名应相同 = 1
- 对于小组 session =3,有 b 个问题和 a 问题,因此排名应为 b=1 和 a=2
无论如何,为什么每个组的排名不从 1、2、3... 开始?
最佳答案
使用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
关于python - pandas groupby 并在每组以 1 开头的组内排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54530503/