python - 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。
谢谢。
解决方案
假设您想要减去并更新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