多ticker股票数据按代码分组后如何索引Adj Close计算均值
你现在处理的是Pandas的多级列索引(MultiIndex)结构数据,有两种常用方法可以快速提取所有ticker的Adj Close字段并计算均值:
方法1:使用xs方法(更直观)
xs是Pandas专门用于多级索引切片的方法,直接指定要取的第二级列名称、对应层级和操作轴即可:
# 提取所有ticker的Adj Close列 adj_close = df.xs('Adj Close', level=1, axis=1) # 计算每个ticker的Adj Close均值,自动跳过NaN值 adj_close_mean = adj_close.mean()
参数说明:
'Adj Close':要匹配的二级索引值level=1:指定匹配的是二级索引(一级ticker索引为level=0,二级字段索引为level=1)axis=1:指定操作对象是列索引
方法2:使用.loc多级索引
如果需要更灵活的切片逻辑,可以用.loc配合多级索引元组实现:
# 行方向取所有,列方向取任意一级索引、二级索引为Adj Close的列 adj_close = df.loc[:, (slice(None), 'Adj Close')] # 计算均值 adj_close_mean = adj_close.mean()
其中slice(None)对应一级ticker索引的全选,等价于Python原生的:切片逻辑。
运行后得到的adj_close_mean就是以ticker名为索引、对应Adj Close均值为值的Series结果。
如果已经提前按ticker做了列分组,也可以直接在分组对象上调用apply实现:
grouped = df.groupby(level=0, axis=1) adj_close_mean = grouped.apply(lambda x: x.xs('Adj Close', level=1, axis=1).mean())
内容的提问来源于stack exchange,提问作者user17515144
相关产品推荐
相关产品推荐

