Python Pandas:如何像求和一样对索引列内子列做减法?
实现类似求和的简洁减法操作
嘿,太懂你偏爱那种简洁优雅代码的感觉了!其实要实现每个索引列下两个子列的减法,咱们可以根据你的数据结构来选择合适的简便方法,下面给你两种实用方案:
方案1:针对固定子列名称的高效写法
如果你的子列名称是固定的(比如每个索引组下都有Value1和Value2),直接提取对应子列后相减就好,这种写法既简洁又高效,完全不输求和的优雅感:
# 假设你的数据是多层列索引,提取每个组的Value1减去Value2 result = df.xs('Value1', level=1, axis=1) - df.xs('Value2', level=1, axis=1)
方案2:通用型分组减法(子列不固定时用)
如果每个索引组下的子列名称不固定,但确保每个组里只有两个子列,那可以用groupby结合自定义lambda函数,完美复刻求和的链式写法逻辑:
# 按外层索引列分组,每组内第一个子列减第二个子列 result = df.groupby(level=0, axis=1).apply(lambda group: group.iloc[:, 0] - group.iloc[:, 1])
举个实际例子
假设你的数据结构是这样的多层列索引:
import pandas as pd import numpy as np columns = pd.MultiIndex.from_tuples([('GroupA', 'Sub1'), ('GroupA', 'Sub2'), ('GroupB', 'Sub1'), ('GroupB', 'Sub2')]) df = pd.DataFrame(np.random.randn(3,4), columns=columns)
求和用df.groupby(level=0, axis=1).sum(),而用上面的方案2就能得到每个Group下Sub1 - Sub2的结果,和求和写法一样简洁!
内容的提问来源于stack exchange,提问作者marco
相关产品推荐
相关产品推荐

