【Pandas】pandas DataFrame pct_change
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, …]) | 用于计算 百分比变化 的方法 |
pandas.DataFrame.pct_change()
pandas.DataFrame.pct_change()
是 Pandas 中用于计算 百分比变化 的方法,通常用于时间序列数据或面板数据中的增长率分析。它返回一个新的 DataFrame,表示当前元素与先前元素之间的百分比变化。
语法
DataFrame.pct_change(periods=1, fill_method='pad', limit=None, freq=None, **kwargs)
参数说明
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
periods | int | 1 | 计算变化的间隔(向前看几个周期) |
fill_method | str | 'pad' | 填充缺失值的方法: - 'pad' / 'ffill' : 向前填充- 'bfill' / 'backfill' : 向后填充- None : 不填充 |
limit | int | None | 填充的最大连续 NaN 数量 |
freq | DateOffset, timedelta, 或 str | None | 如果是时间序列数据,可以指定频率(如 'D' , 'M' 等) |
**kwargs | dict | 无 | 其他可选参数 |
返回值
- 返回一个与原 DataFrame 形状相同的 DataFrame,表示每个元素相对于前
periods
个元素的百分比变化。 - 第
n
行的值为:(current / previous) - 1
- 初始
periods
行会是NaN
,因为没有足够的历史数据进行比较。
示例
示例数据:
import pandas as pddf = pd.DataFrame({'A': [10, 20, 30, 40],'B': [100, 150, 200, 250]
})
输出原始数据:
A B
0 10 100
1 20 150
2 30 200
3 40 250
示例 1:默认参数(计算相邻行的百分比变化)
df.pct_change()
结果:
A B
0 NaN NaN
1 1.000000 0.500000
2 0.500000 0.333333
3 0.333333 0.250000
解释:
- 第一行无法计算变化,因此为
NaN
- 第二行 A:
(20/10)-1 = 1.0
,B:(150/100)-1 = 0.5
示例 2:设置 periods=2(与两行前的数据对比)
df.pct_change(periods=2)
结果:
A B
0 NaN NaN
1 NaN NaN
2 2.000000 1.000000
3 1.000000 0.666667
解释:
- 第三行 A:
(30/10)-1 = 2.0
,B:(200/100)-1 = 1.0
- 前两行无法计算,因此为
NaN
示例 3:使用 fill_method 填充 NaN
df.pct_change(fill_method='bfill')
结果:
A B
0 1.000000 0.500000
1 1.000000 0.500000
2 0.500000 0.333333
3 0.333333 0.250000
解释:
- 使用
bfill
填充第一个NaN
行(向后填充)
注意事项
pct_change()
常用于金融数据分析、增长率分析等场景。- 支持处理
NaN
值(通过fill_method
控制是否填充)。 - 可结合
resample()
或rolling()
实现更复杂的时序分析。