如何利用Pandas多级索引(MultiIndex)计算各坐标点不同温度下的测量值差值?
如何利用Pandas多级索引(MultiIndex)计算各坐标点不同温度下的测量值差值?
嘿,这个需求太典型了,咱们借助Pandas的多级索引特性,就能用非常pythonic的方式搞定!给你分享几个简洁的实现思路:
方法一:用xs(Cross-Section)直接提取对应温度的数据做差值
这种方法最直观,直接把两个温度下的H值分别提取出来,Pandas会自动按(X,Y)索引对齐,直接相减就行:
# 提取T=125时的H数据 h_125 = df.xs(125, level='T')['H'] # 提取T=25时的H数据 h_25 = df.xs(25, level='T')['H'] # 计算差值并整理成目标格式 dH = h_125 - h_25 result = dH.reset_index(name='dH').to_dict('records')
运行后result就是你想要的字典列表啦!
方法二:用unstack把温度转成列再计算
如果后续需要处理更多温度的差值,这种方法扩展性更好,先把T这层索引转成列,再直接做列间运算:
# 将T层级的索引转为列 df_unstacked = df.unstack(level='T') # 计算125℃与25℃的H差值 df_unstacked['dH'] = df_unstacked['H'][125] - df_unstacked['H'][25] # 筛选需要的列并整理格式 result = df_unstacked['dH'].reset_index().to_dict('records')
方法三:用groupby按坐标分组计算
如果需要对每个坐标组做更复杂的自定义计算,用分组的方式更灵活:
def compute_difference(group): # 从组内提取对应温度的H值并计算差值 return group.xs(125, level='T')['H'].iloc[0] - group.xs(25, level='T')['H'].iloc[0] # 按X、Y分组后应用自定义函数 result = df.groupby(['X', 'Y']).apply(compute_difference).reset_index(name='dH').to_dict('records')
这几种方法都能高效得到你要的结果,其中第一种方法最简洁直接,适合你当前的场景~
备注:内容来源于stack exchange,提问作者Christof Bodner
相关产品推荐
相关产品推荐

