生生不息

生生不息

AI计算通货膨胀调整

2025-06-22
AI计算通货膨胀调整

提示词

我们现在有一个DataFrame,以日期为index,第一列是某股票的收盘价,第二列是CPI数据,我需要计算出股价的收益,再使用CPI数据计算通货膨胀率,最后进行通货膨胀调整,清给出示例代码。

答案

import pandas as pd
import numpy as np

# 创建示例数据(日期为索引,收盘价和CPI两列)
dates = pd.date_range(start='2024-01', periods=12, freq='M')
data = {
    'close': [100, 105, 108, 112, 115, 120, 118, 125, 130, 135, 140, 145],
    'cpi': [280, 282, 285, 288, 290, 295, 298, 302, 305, 308, 312, 315]
}
df = pd.DataFrame(data, index=dates)

# ===== 核心计算步骤 =====
# 1. 计算股票名义收益率(简单收益率)
df['nominal_return'] = df['close'].pct_change() * 100  # [3](@ref)

# 2. 计算通货膨胀率(基于CPI的月度环比)
df['inflation_rate'] = (df['cpi'].pct_change() * 100)  # [5,6](@ref)

# 3. 计算实际收益率(通胀调整后的收益率)
df['real_return'] = ((1 + df['nominal_return']/100) / (1 + df['inflation_rate']/100) - 1) * 100  # [5](@ref)

# 4. 价格通胀调整(以基期CPI为基准)
base_cpi = df['cpi'].iloc[0]  # 取第一个月为基准期
df['real_price'] = df['close'] / (df['cpi'] / base_cpi)  # [5,6](@ref)

# 处理首行NaN
df.fillna(0, inplace=True)

# 打印结果
print(df[['close', 'cpi', 'nominal_return', 'inflation_rate', 'real_return', 'real_price']])

输出结果没毛病

            close  cpi  nominal_return  inflation_rate  real_return  real_price
2024-01-31    100  280        0.000000        0.000000     0.000000  100.000000
2024-02-29    105  282        5.000000        0.714286     4.255319  104.255319
2024-03-31    108  285        2.857143        1.063830     1.774436  106.105263
2024-04-30    112  288        3.703704        1.052632     2.623457  108.888889
2024-05-31    115  290        2.678571        0.694444     1.970443  111.034483
2024-06-30    120  295        4.347826        1.724138     2.579219  113.898305
2024-07-31    118  298       -1.666667        1.016949    -2.656600  110.872483
2024-08-31    125  302        5.932203        1.342282     4.529128  115.894040
2024-09-30    130  305        4.000000        0.993377     2.977049  119.344262
2024-10-31    135  308        3.846154        0.983607     2.834665  122.727273
2024-11-30    140  312        3.703704        1.298701     2.374169  125.641026
2024-12-31    145  315        3.571429        0.961538     2.585034  128.888889