如何在Python中从DataFrame计算几何均值及年度Change变量几何均值?
在Python中计算DataFrame的几何均值(含年度分组计算)
一、基础几何均值计算
几何均值的核心计算逻辑有两种,适配不同场景:
方式1:乘积开方法(适合小数据集)
如果数据无0或负数,可直接通过乘积开n次方计算(若为涨跌幅数据,需先加1转换为增长因子):
import pandas as pd import numpy as np # 示例DataFrame df = pd.DataFrame({'Change': [0.01, 0.02, -0.005, 0.015]}) # 计算涨跌幅的几何均值 geo_mean = (df['Change'] + 1).prod() ** (1/len(df)) - 1 print(f"几何均值:{geo_mean:.4f}")
方式2:对数转换法(更稳定,适合大数据集)
利用对数将乘积运算转为求和,避免数值溢出问题:
log_vals = np.log(df['Change'] + 1) geo_mean = np.exp(log_vals.mean()) - 1 print(f"几何均值:{geo_mean:.4f}")
二、按年度分组计算Change的年度几何均值
针对每日数据的年度分组需求,按以下步骤操作:
步骤1:处理日期列
先将日期列转为datetime类型,提取年份作为分组依据:
# 模拟每日数据集(匹配你的数据结构) data = { 'Date': pd.date_range(start='2020-01-01', end='2022-12-31', freq='D'), 'Change': np.random.uniform(-0.02, 0.02, size=1096) } df = pd.DataFrame(data) # 提取年份 df['Year'] = df['Date'].dt.year
步骤2:分组计算年度几何均值
通过groupby结合自定义函数实现分组计算:
# 定义年度几何均值计算函数 def annual_geo_mean(x): return np.exp(np.log(x + 1).mean()) - 1 # 按年份分组计算 annual_geo_results = df.groupby('Year')['Change'].apply(annual_geo_mean).reset_index() annual_geo_results.columns = ['Year', 'Annual_Geometric_Mean'] print(annual_geo_results)
关键注意事项
- 若
Change列存在导致1+Change为0或负数的极端值,需先清洗数据(如剔除或按业务逻辑修正),否则对数计算会报错。 - 如果原始日期列是字符串格式,需先用
pd.to_datetime(df['Date'])转换为datetime类型后再提取年份。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

