python - pandas groupby 并在每个组以 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
我想在会话中对问题进行排名。我试过:
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
- 对于组会话 = 2,两个等级相等,因此它们的等级应该相同 = 1
- 对于组会话 = 3,有 b 个问题和一个问题,所以排名应该是 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
推荐阅读
- c# - 当我们有支持 OOP 概念的类和接口时,为什么 C# 支持结构
- java - MetricRegistry 的可序列化类中的非瞬态不可序列化实例字段
- python - 一种将函数循环到自身的pythonic方法
- objective-c - XCode - 如何在共享扩展中包含 React Native 库?
- matlab - 为什么如果 `t(n)==0.06`,在我的命令窗口中无法显示 0.06?
- ios - 如何将四舍五入的整数显示到标签?
- javascript - 当光标在画布区域之外时如何重置悬停效果?
- javascript - 与异步 JavaScript 代码作斗争
- druid - 如何处理 DRUID 中的嵌套数组
- image - ¿如何从 com.itextpdf.text.Image 图像中获取位图?