我有一个带有多级索引的数据框,我需要对它进行切片并在切片之间执行数学运算。
# sample df
idx=pd.IndexSlice
np.random.seed(123)
tuples = list(zip(*[['one', 'one', 'two', 'two', 'three', 'three'],['foo', 'bar', 'foo', 'bar', 'foo', 'bar']]))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 6), index=['A', 'B', 'C'], columns=index)
如果我想在各列之间进行加减运算,我可以使用索引切片来执行,例如:
df.loc[:,idx['three','foo']] - df.loc[:,idx['two','foo']]
然而,如果我想使用更高级别的切片,它将无法工作并返回NaN:
# not working
df.loc[:,idx['three',:]] - df.loc[:,idx['two',:]]
有没有一种简单的方法可以使用数据框的更高级别的切片,仅添加/减去相应的列?我的数据框可能包含多级索引中的数百列。谢谢。
df = df.rename(columns={'foo':'bar'}, level=1)
,但需要重命名所有值,因为会出现相同的问题,导致 NaN。 - jezrael