Pandas multi-index dataframe同名项vlookup查询及动态平均值计算方法
最优实现方案
无需拆分出两个独立DataFrame再做外连接,直接对原多层索引DataFrame做结构转换后分组聚合即可,代码更简洁,性能也更优。
核心逻辑是利用pandas的reshape能力把宽表转长表,直接用内置的mean()方法就能自动匹配你的动态平均值规则:算术平均值默认会对非空值求平均,商品出现几周就有几个有效数值,刚好对应除以出现周数的要求。
完整代码示例
1. 模拟原DataFrame结构(你可跳过这步直接用自己的真实数据)
import pandas as pd # 构造和你示例结构一致的多层列索引DataFrame cols = pd.MultiIndex.from_tuples([ ('week1', 'Name'), ('week1', 'Value'), ('week2', 'Name'), ('week2', 'Value') ]) data = [ ['a', 0.1, 'b', 0.6], ['b', 0.3, 'a', 0.3], ['c', 0.5, 'd', 0.1], ['d', 0.7, 'e', 0.4] ] df = pd.DataFrame(data, columns=cols)
2. 核心处理代码
# 把多层列的宽表转成「周、商品名、数值」结构的长表 long_df = df.stack(level=0).reset_index(drop=True) # 按商品名分组求平均值,自动匹配动态除数规则 result = long_df.groupby('Name')['Value'].mean().reset_index(name='Average_Value')
3. 输出结果验证
打印result即可得到你需要的最终表:
Name Average_Value 0 a 0.2 1 b 0.4 2 c 0.5 3 d 0.4 4 e 0.4
内容的提问来源于stack exchange,提问作者jaeson
相关产品推荐
相关产品推荐

