如何使用Pandas从DataFrame生成基于log(this year/previous year)的增长率向量?
用Pandas生成对数增长率向量
1. 读入并整理数据
首先把CSV文件导入Pandas DataFrame,一定要按年份列排序——这步是关键,顺序错了计算出的增长率完全无效:
import pandas as pd import numpy as np # 替换成你的CSV文件路径 df = pd.read_csv('your_data.csv') # 按年份升序排序,重置索引避免乱序问题 df = df.sort_values('year').reset_index(drop=True)
2. 计算对数增长率
按照你定义的log(本年数值/上年数值)规则,用shift()方法获取上一年的数据,再结合np.log()完成计算:
# 给原DataFrame新增增长率列 df['log_growth_rate'] = np.log(df['target_column'] / df['target_column'].shift(1)) # 如果只需要单独的增长率向量,直接生成并删除空值(第一年没有上年数据,结果为NaN) growth_vector = np.log(df['target_column'] / df['target_column'].shift(1)).dropna()
shift(1):将数值列整体向下偏移一行,让每一行都能匹配到上一年的对应数值dropna():剔除第一行的空值,因为第一年没有前置数据,无法计算增长率
实际示例
假设你的CSV数据如下:
| year | sales |
|---|---|
| 2019 | 80 |
| 2020 | 96 |
| 2021 | 120 |
运行代码后得到的增长率向量为:
0 0.182322 1 0.223144 Name: log_growth_rate, dtype: float64
对应log(96/80)和log(120/96)的计算结果
注意事项
- 确保目标数值列没有0或负数,否则
np.log()会抛出错误,需先清理异常值 - 如果你的年份列、数值列不是示例中的命名,记得替换成自己文件里的实际列名
内容的提问来源于stack exchange,提问作者businesstoe
相关产品推荐
相关产品推荐

