如何衡量数据新增变化?问询每周平均新增数据量计算方法
解决每周平均新增数据量/增长率计算问题
首先要明确你的data列代表的是每周新增量还是累计数据量——这是问题的核心:
1. 如果data是累计数据量(你可能写错了示例数据)
你描述的“8月25日新增31,9月1日又新增31,相当于100%增长”,对应的累计数据应该是[31, 62, 93](而非全31)。这种情况下:
计算每周新增绝对量
用diff()直接计算相邻周的累计差值,就是当周新增量:
import pandas as pd d = {'date':['2019-08-25', '2019-09-01', '2019-09-08'], 'data':[31, 62, 93]} df_sample = pd.DataFrame(data=d) # 计算每周新增量 df_sample['weekly_increase'] = df_sample['data'].diff()
计算每周增长率及平均增长率
用pct_change()计算累计数据的环比增长率,再求平均:
# 计算每周增长率 df_sample['growth_rate'] = df_sample['data'].pct_change() # 算术平均增长率 avg_growth_arithmetic = df_sample['growth_rate'].mean() # 几何平均增长率(更适合复利增长场景,结果更准确) n = len(df_sample) avg_growth_geometric = (df_sample['data'].iloc[-1] / df_sample['data'].iloc[0]) ** (1/(n-1)) - 1
2. 如果data确实是每周新增量(示例数据正确)
此时你的data列数值全为31,说明每周新增量没有变化,diff()和pct_change()返回0是正确结果。如果你的需求是计算累计数据的平均增长,需要先转换为累计值再计算:
import pandas as pd d = {'date':['2019-08-25', '2019-09-01', '2019-09-08'], 'data':[31, 31, 31]} df_sample = pd.DataFrame(data=d) # 计算累计数据量 df_sample['cumulative_data'] = df_sample['data'].cumsum() # 计算累计数据的增长率 df_sample['growth_rate'] = df_sample['cumulative_data'].pct_change() # 算术平均增长率 avg_growth_arithmetic = df_sample['growth_rate'].mean() # 几何平均增长率 n = len(df_sample) avg_growth_geometric = (df_sample['cumulative_data'].iloc[-1] / df_sample['cumulative_data'].iloc[0]) ** (1/(n-1)) - 1
为什么你的原方法返回0?
因为你提供的示例数据中data列数值完全相同,diff()计算的是相邻值的差值(31-31=0),pct_change()计算的是相对变化率((31-31)/31=0),这是符合逻辑的结果,不符合预期是因为你混淆了“新增量”和“累计量”的概念。
内容的提问来源于stack exchange,提问作者Wolfy
相关产品推荐
相关产品推荐

