Python 如何替换多索引的某些值?

Python 如何替换多索引的某些值?,python,pandas,dataframe,indexing,replace,Python,Pandas,Dataframe,Indexing,Replace,我有一个数据框看起来像 使用多索引。 现在,如果前一行中的日期是星期六,我想将cluster列中等于1的所有值替换为4 我设法得到了一个布尔数组,它对所有需要更改的值都是真的,对其他所有值都是假的,如下所示: a = pd.to_datetime(data_pivot.index.get_level_values(0)).dayofweek==6 b = data_pivot.index.get_level_values(1)==1 np.logical_and(a, b) 但现在我不知道如

我有一个数据框看起来像 使用多索引。 现在,如果前一行中的日期是星期六,我想将cluster列中等于1的所有值替换为4

我设法得到了一个布尔数组,它对所有需要更改的值都是真的,对其他所有值都是假的,如下所示:

a = pd.to_datetime(data_pivot.index.get_level_values(0)).dayofweek==6
b = data_pivot.index.get_level_values(1)==1

np.logical_and(a, b)

但现在我不知道如何相应地更改多重索引中的所有值。

这并不容易。多索引是由元组组成的,元组是不可变的,而索引本身也是不可变的,因此我们需要重新创建整个多索引

从数组中重新创建整个多索引,我们使用
np修改第二级。其中
在满足条件时将其更改为4

样本数据
m=((df.index.get_level_值(0.dayofweek==6)
&(df.index.get_level_值(1)==1))
df.index=pd.MultiIndex.from_数组([df.index.get_level_值(0),
其中(m,4,df.index.get_level_value(1)))
打印(df)
#资料
#2010-01-01 2     1
#2010-01-02 2     1

#2010-01-03 4这不容易。多索引是由元组组成的,元组是不可变的,而索引本身也是不可变的,因此我们需要重新创建整个多索引

从数组中重新创建整个多索引,我们使用
np修改第二级。其中
在满足条件时将其更改为4

样本数据
m=((df.index.get_level_值(0.dayofweek==6)
&(df.index.get_level_值(1)==1))
df.index=pd.MultiIndex.from_数组([df.index.get_level_值(0),
其中(m,4,df.index.get_level_value(1)))
打印(df)
#资料
#2010-01-01 2     1
#2010-01-02 2     1
#2010-01-03 4     1
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