如何在带多维度索引的pandas DataFrame中为np.where赋值添加日期过滤
问题解决:给带多级索引的DataFrame按日期过滤并使用np.where更新
因为你的DataFrame是employee_id和date的多级索引,首先需要通过df.index.get_level_values('date')提取索引中的日期列,再结合需求把日期条件加入np.where逻辑中,分两种常见场景处理:
场景1:仅更新2020-01-01之前的行,其余行保留原Sale值
如果只需要对2020-01-01之前的记录执行“取sale_actual和sale_expect较大值”的操作,其他行保持原有Sale数据不变,可以嵌套np.where实现:
# 提取多级索引中的date列 date_index = df.index.get_level_values('date') # 外层判断日期条件,满足则执行数值逻辑,否则保留原Sale值 df['Sale'] = np.where( date_index < '2020-01-01', np.where(df.sale_actual > df.sale_expect, df.sale_actual, df.sale_expect), df['Sale'] )
场景2:仅当日期符合条件且数值满足时才更新
如果需要同时满足“日期在2020-01-01之前”和“sale_actual > sale_expect”两个条件时,才赋值sale_actual,否则统一赋值sale_expect,可以用逻辑与&组合条件:
date_index = df.index.get_level_values('date') # 复合条件判断 df['Sale'] = np.where( (date_index < '2020-01-01') & (df.sale_actual > df.sale_expect), df.sale_actual, df.sale_expect )
注意:如果你的date索引不是datetime类型,需要先转成datetime格式,比如
pd.to_datetime(df.index.get_level_values('date')),避免日期比较出错。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

