首页 > 解决方案 > Pandas Multi/Hierarchical Indexing - 在列之间执行算术运算

问题描述

我有一个这样的数据框:

arr = np.random.randint(10, 99, (4,4))
df = pd.DataFrame(arr)
df.columns = pd.MultiIndex.from_product([['X','Y'],['A','B']])

它看起来像这样:

    X       Y    
    A   B   A   B
0  76  78  29  24
1  34  80  83  56
2  56  44  40  30
3  16  38  45  93

对于 X 中 A < B 的所有行,我想在 Y 中执行 A - B。我该怎么做?

我这样做是为了过滤并从 Y 中选择 A 和 B

df[df['X']['A'] < df['X']['B']].loc[:, ('Y', ['A', 'B'])]

    Y
    A   B
0   29  24
1   83  56
3   45  93

但我不知道如何做 A - B。

谢谢。

标签: pythonpandas

解决方案


假设您想要减去并更新A结果,您可以通过以下方式进行索引:

m = (df[('X','A')] < df[('X','B')])
df.loc[m,('Y','A')] = df.loc[m,('Y','A')] - df.loc[m,('Y','B')]

print(df)
    X       Y    
    A   B   A   B
0  77  67  55  87
1  36  85  26  50
2  77  14  62  89
3  88  33  82  44

推荐阅读