使用Pandas编写函数计算绝对/相对变化无输出问题排查
Pandas计算年度金额变化值问题修复
问题原因
你的代码错误地将place和year同时作为分组依据,每个分组仅对应单个年份的单条数据,diff()和pct_change()无法在单条数据的分组内计算前后变化值,因此生成的结果全为NaN。要实现同一地点、不同年份的金额变化计算,只需按place分组即可。
修正后的代码
# 导入库 import pandas as pd import numpy as np # 定义计算函数 def calculate_change(df): # 按地点分组,计算年度金额的绝对变化 df['absolute_change'] = df.groupby('place')['amount'].diff() # 按地点分组,计算年度金额的相对变化(百分比) df['relative_change'] = df.groupby('place')['amount'].pct_change() return df # 示例数据 df = pd.DataFrame({'place': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 'year': [2010, 2011, 2012, 2013, 2014, 2010, 2011, 2012, 2013, 2014], 'amount': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}) # 执行函数并查看结果 result_df = calculate_change(df) print(result_df)
输出结果
| place | year | amount | absolute_change | relative_change |
|---|---|---|---|---|
| A | 2010 | 1 | NaN | NaN |
| A | 2011 | 2 | 1.0 | 1.0 |
| A | 2012 | 3 | 1.0 | 0.5 |
| A | 2013 | 4 | 1.0 | 0.333333 |
| A | 2014 | 5 | 1.0 | 0.25 |
| B | 2010 | 6 | NaN | NaN |
| B | 2011 | 7 | 1.0 | 0.166667 |
| B | 2012 | 8 | 1.0 | 0.142857 |
| B | 2013 | 9 | 1.0 | 0.125 |
| B | 2014 | 10 | 1.0 | 0.111111 |
内容的提问来源于stack exchange,提问作者yocodefreak
相关产品推荐
相关产品推荐

