这并不容易。一个MultiIndex是由元组组成的,元组是不可变的,而Index本身是不可变的,所以我们需要重新创建整个MultiIndex。
从数组中重新创建整个 MultiIndex,我们在其中使用np.where 修改第二级,以在满足您的条件时将其更改为 4。
样本数据
import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_arrays([pd.date_range('2010-01-01', freq='d', periods=5),
[2,2,1,1,2]])
df = pd.DataFrame({'data': 1}, index=idx)
# data
#2010-01-01 2 1
#2010-01-02 2 1
#2010-01-03 1 1
#2010-01-04 1 1
#2010-01-05 2 1
m = ((df.index.get_level_values(0).dayofweek == 6)
& (df.index.get_level_values(1) == 1))
df.index = pd.MultiIndex.from_arrays([df.index.get_level_values(0),
np.where(m, 4, df.index.get_level_values(1))])
print(df)
# data
#2010-01-01 2 1
#2010-01-02 2 1
#2010-01-03 4 1 <- Index level 1 is changed to 4
#2010-01-04 1 1
#2010-01-05 2 1