You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas多级索引横截面切片中设置均值相对值(非循环实现)

问题解决:Pandas多级索引数据框横截面相对均值赋值

你遇到的NaN问题核心是多级索引对齐不匹配:右侧计算出的Series索引是单层的(['x','y']),而左侧目标列是MultiIndex元组(('x','b'), ('y','b')),两者无法对应导致赋值失败,最终出现NaN。

简化易读的实现方法

无需遍历索引列,直接利用Pandas的内置操作即可解决,同时简化均值计算步骤:

import pandas as pd
import numpy as np

x = pd.DataFrame({'a': [1, 2, 3], 'b': [1, 2, 3]})
y = pd.DataFrame({'a': [11, 12, 13], 'b': [21, 22, 23]})

df = pd.concat({'x': x, 'y': y}, axis=1)

# 获取指定行的所有'a'列数据,直接计算均值(自动忽略NaN)
row_a_data = df.loc[1, (slice(None), 'a')]
average = row_a_data.mean()

# 用.values跳过索引对齐,直接将计算结果写入目标'b'列
df.loc[1, (slice(None), 'b')] = (row_a_data - average).values

执行结果

x        y
   a    b   a     b
0  1  1.0  11  21.0
1  2 -5.0  12   5.0
2  3  3.0  13  23.0

关键说明

  • 用row_a_data.mean()替代手动处理NaN和numpy均值计算,更简洁且符合Pandas使用习惯。
  • 赋值时使用.values直接传递数值数组,绕过索引对齐的限制,确保值能正确写入目标列。
  • 全程无需遍历索引列,代码逻辑清晰易读。

内容的提问来源于stack exchange,提问作者HAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:12:10