Python 如何替换多索引的某些值?
我有一个数据框看起来像 使用多索引。 现在,如果前一行中的日期是星期六,我想将cluster列中等于1的所有值替换为4 我设法得到了一个布尔数组,它对所有需要更改的值都是真的,对其他所有值都是假的,如下所示: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) 但现在我不知道如
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