Pandas2.2 DataFrame
Computations descriptive stats
方法 | 描述 |
---|---|
DataFrame.abs() | 用于返回 DataFrame 中每个元素的绝对值 |
DataFrame.all([axis, bool_only, skipna]) | 用于判断 DataFrame 中是否所有元素在指定轴上都为 True |
DataFrame.any(*[, axis, bool_only, skipna]) | 用于判断 DataFrame 中是否至少有一个元素在指定轴上为 True |
DataFrame.clip([lower, upper, axis, inplace]) | 用于截断(限制)DataFrame 中的数值 |
DataFrame.corr([method, min_periods, …]) | 用于计算 DataFrame 中各列之间的相关系数矩阵(Correlation Matrix) |
DataFrame.corrwith(other[, axis, drop, …]) | 用于计算当前 DataFrame 的每一列(或行)与另一个 Series 或 DataFrame 中对应列的相关系数 |
DataFrame.count([axis, numeric_only]) | 用于统计 DataFrame 中每列或每行的非空(非 NaN)元素数量 |
DataFrame.cov([min_periods, ddof, numeric_only]) | 用于计算 DataFrame 中每对列之间的协方差 |
DataFrame.cummax([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计最大值(cumulative maximum) |
DataFrame.cummin([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计最小值(cumulative minimum) |
DataFrame.cumprod([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计乘积(cumulative product) |
DataFrame.cumsum([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计和(cumulative sum) |
DataFrame.describe([percentiles, include, …]) | 用于快速生成数据集的统计摘要(summary statistics) |
DataFrame.diff([periods, axis]) | 用于计算 DataFrame 中相邻行或列之间的差值(差分) |
DataFrame.eval(expr, *[, inplace]) | 用于在 DataFrame 上下文中高效地执行字符串形式的表达式运算 |
DataFrame.kurt([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的峰度(Kurtosis) |
DataFrame.kurtosis([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的峰度(Kurtosis) |
DataFrame.max([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的最大值(maximum) |
DataFrame.mean([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的平均值(mean) |
DataFrame.median([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的中位数(median) |
DataFrame.min([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的最小值(minimum) |
DataFrame.mode([axis, numeric_only, dropna]) | 用于查找 众数(出现频率最高的值) 的方法 |
DataFrame.pct_change([periods, fill_method, …]) | 用于计算 百分比变化 的方法 |
DataFrame.prod([axis, skipna, numeric_only, …]) | 用于计算 每列或每行元素的乘积 的方法 |
DataFrame.product([axis, skipna, …]) | 用于计算 DataFrame 中每列或每行所有元素的乘积 |
DataFrame.quantile([q, axis, numeric_only, …]) | 用于计算 分位数(Quantiles) 的方法 |
DataFrame.rank([axis, method, numeric_only, …]) | 用于计算 DataFrame 中每列或每行元素的排名(rank) |
pandas.DataFrame.rank()
pandas.DataFrame.rank()
方法用于计算 DataFrame 中每列或每行元素的排名(rank),即根据数值大小为每个元素分配一个排序位置。它支持多种排名方式,如平均排名、最小/最大排名等,并可控制缺失值的处理方式和排序方向。
📌 方法签名:
DataFrame.rank(axis=0, method='average', numeric_only=False, na_option='keep', ascending=True, pct=False)
🧾 参数说明:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
axis | {0/‘index’, 1/‘columns’}, 默认 0 |
0
或'index'
:按列计算排名(默认)1
或'columns'
:按行计算排名 |
|method
| str |'average'
| 当有重复值时的排名方法:
-'average'
: 平均排名
-'min'
: 最小排名(并列取最小)
-'max'
: 最大排名(并列取最大)
-'first'
: 按出现顺序排名
-'dense'
: 紧密排名(不跳过排名) |
|numeric_only
| bool | False | 是否只考虑数值类型列(int、float),忽略布尔、字符串等非数值列 |
|na_option
| {‘keep’, ‘top’, ‘bottom’} |'keep'
| 控制 NaN 值的排名方式:
-'keep'
: 保留 NaN,其排名为 NaN
-'top'
: 将 NaN 视为最大值(升序时排最后)
-'bottom'
: 将 NaN 视为最小值(升序时排最前) |
|ascending
| bool | True | 排名是否升序(True 表示从小到大;False 表示从大到小) |
|pct
| bool | False | 是否返回百分位排名(True 表示 0~1 的比例形式) |
📊 返回值
- 返回一个新的 DataFrame,形状与原 DataFrame 相同,表示每个元素在其所在行或列中的排名。
- 若某列为非数值类型且未设置
numeric_only=True
,则该列不会参与排名并可能抛出错误。
✅ 示例及结果
示例数据:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [3, 1, 2],
'B': [10, 5, 10],
'C': [np.nan, 4, 4],
'D': ['a', 'b', 'c'] # 非数值列
})
输出原始数据:
A B C D
0 3 10 NaN a
1 1 5 4.0 b
2 2 10 4.0 c
示例 1:默认参数(按列计算排名,使用 average 方法)
df.rank()
结果:
A B C
0 3.0 2.0 NaN
1 1.0 1.0 1.5
2 2.0 2.0 1.5
解释:
- 列 A:[3, 1, 2] → 排名分别为 3, 1, 2
- 列 B:两个 10 → 使用
'average'
方法,它们的排名是 (1+2)/2 = 1.5 和 1.5 - 列 C:NaN 被保留(
na_option='keep'
) - 列 D 抛出错误(不是数值列)
示例 2:设置 method='min'
(最小排名法)
df[['A', 'B', 'C']].rank(method='min')
结果:
A B C
0 3.0 2.0 NaN
1 1.0 1.0 1.0
2 2.0 2.0 1.0
解释:
- 列 B 中两个 10 的排名都为 1(最小排名)
- 列 C 中两个 4 的排名也都是 1(最小排名)
示例 3:设置 na_option='bottom'
(将 NaN 排名为最小)
df[['A', 'B', 'C']].rank(na_option='bottom')
结果:
A B C
0 3.0 2.0 3.0
1 1.0 1.0 1.5
2 2.0 2.0 1.5
解释:
- NaN 在列 C 中被视为最小值,因此排名为 3(升序下排在最后)
示例 4:设置 ascending=False
(降序排名)
df[['A', 'B', 'C']].rank(ascending=False)
结果:
A B C
0 1.0 1.5 NaN
1 3.0 3.0 2.5
2 2.0 1.5 2.5
解释:
- 列 A:3 是最大 → 排名 1
- 列 B:两个 10 是最大 → 排名 1.5(平均排名)
示例 5:设置 pct=True
(返回百分位排名)
df[['A', 'B', 'C']].rank(pct=True)
结果:
A B C
0 1.0 0.666667 NaN
1 0.333333 0.333333 0.5
2 0.666667 0.666667 0.5
解释:
- 百分位排名基于总个数进行归一化(如 3 个元素对应 1/3、2/3、3/3)
示例 6:按行计算排名(axis=1
)
df[['A', 'B', 'C']].rank(axis=1, method='dense')
结果:
A B C
0 3 1 NaN
1 1 3 2
2 1 3 2
解释:
- 第0行:3(A)、10(B)、NaN(C) → 排名分别为 3、1(最大值),C 为 NaN
- 第1行:1(A)、5(B)、4(C) → 排名分别为 1、3、2
示例 7:结合 numeric_only=True
忽略非数值列
df.rank(numeric_only=True)
结果:
A B C
0 3.0 2.0 NaN
1 1.0 1.0 1.5
2 2.0 2.0 1.5
解释:
- 字符串列
D
被自动忽略
示例 8:使用 method='dense'
进行紧密排名
df[['A', 'B', 'C']].rank(method='dense')
结果:
A B C
0 3.0 2.0 NaN
1 1.0 1.0 1.0
2 2.0 2.0 1.0
解释:
- 紧密排名,即使有重复值也不会跳过后续排名
⚠️ 注意事项
- 只适用于数值型列(int、float),除非设置
numeric_only=True
- 支持处理
NaN
值(通过na_option
控制排名方式) - 多种排名方法可用于不同场景(如比赛排名、统计排名等)
- 不影响原始 DataFrame,返回新对象
🎯 适用场景
场景 | 描述 |
---|---|
特征工程 | 构造排名特征,如“历史排名”、“相对位置” |
数据分析 | 分析变量的相对大小关系 |
可视化准备 | 准备排名数据用于图表展示 |
模型评估 | 计算预测值的排名误差(Ranking Loss) |
📋 总结
特性 | 描述 |
---|---|
功能 | 计算 DataFrame 中每个元素在其列或行中的排名 |
默认行为 | 按列计算,使用平均排名法,保留 NaN |
是否修改原数据 | 否,返回新 DataFrame |
适用类型 | 数值型列(int、float) |
输出范围 | 浮点数(取决于排名方式) |
rank()
是一个非常实用的方法,适合用于构造排名特征、分析变量相对位置、可视化准备等任务。