在作为日期的MultiIndex的第二级上切片DataFrame

时间:2014-02-12 00:45:58

标签: python pandas

我有一个DataFrame,其MultiIndex的类型为(int,datetime)。我想将“actual_12b1”列的条目设置为0.0到NaN,但仅限于'begdt'(MultiIndex的第二级)是在1998年或之前。经过一些试验和错误后,我最终得到了以下代码:

year_start1999 = datetime(year=1999, month=1, day=1).date()
cond1 = data.index.get_level_values('begdt') < year_start1999
cond2 = data.actual_12b1 == 0.0
data.actual_12b1[cond1 * cond2] = np.nan

代码有效,但似乎过于复杂。由于我是大熊猫的新手(并且被所有切片/过滤所困惑),我认为有人可能会建议一种更清晰的方法来实现相同的结果。

1 个答案:

答案 0 :(得分:2)

您对索引有正确的想法,但使用数据框的replace方法可以更轻松地交换值。例如

date_selector = df.index.get_level_values('begdt') < pd.datetime(1999, 1, 1)
df.actual_12b1[date_selector].replace(0.0, np.nan)