2014-02-12 5 views
1

У меня есть DataFrame с MultiIndex типа (int, datetime). Я хочу установить записи столбца «actual_12b1», которые равны 0.0 в NaN, но только если «begdt» (второй уровень MultiIndex) находится в 1998 году или раньше. После некоторых проб и ошибок, я закончил с следующим кодом:Вырезать DataFrame на втором уровне MultiIndex, который является датой

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 

Код работает, но это кажется слишком сложным. Поскольку я новичок в пандах (и смущен всей этой нарезкой/фильтрацией), я думал, что кто-то может предложить более чистый способ добиться того же результата.

ответ

2

У вас есть правильная идея с индексированием, но обмен значениями будет проще с помощью метода данных Data1200. например.

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

Именно то, что я искал, это более читаемо! – vgregoire

Смежные вопросы