Фильтрация фрейма данных Pandas с использованием столбца месяцев, чтобы сохранить последние n месяцев - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть таблица данных панд с месяцем в виде одного столбца. Я дал небольшой образец ниже:

   df 

 ColA     ColB    ColC   MonthCol

   XY      AA      12      Apr
   XY      BG      15      Apr
   XY      BG      16      Mar
   XY      AD      13      Feb
   XA      AA      15.5    Apr
   XA      AA      16.2    Mar
   XA      AA      13.1    Jan
   XA      AA      13      Feb
   TX      AC      11      Mar
   TX      AX      12      Feb

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

Я пытался применить функцию вида следующим образом (сохраняя 1 и 0, а затем удаляя 0), но она не работает:

      def filtermon(mCol):

          currmon = datetime.datetime.now().strftime("%m")

          if currmon == mCol or currmon - mCol = 1
               val =1 
          else:
                val = 0 
          return val  

После этого я создавал новый столбец из рамки данных как:

       df[filtCol] = df[MonthCol].apply(filtermon)

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Различный макет с использованием date_range + isin

s=pd.date_range(end='2019-04-02',periods=2,freq='MS').strftime('%b')
df[df.MonthCol.isin(s)]
  ColA ColB  ColC MonthCol
0   XY   AA  12.0      Apr
1   XY   BG  15.0      Apr
2   XY   BG  16.0      Mar
4   XA   AA  15.5      Apr
5   XA   AA  16.2      Mar
8   TX   AC  11.0      Mar
1 голос
/ 03 апреля 2019

Мы находимся сейчас в апреле месяце, поэтому мы имеем,

mth = pd.to_datetime('today').month
mth
# 4

df[(pd.to_datetime(df['MonthCol'], format='%b').dt.month - mth).isin([0, -1])]

  ColA ColB  ColC MonthCol
0   XY   AA  12.0      Apr
1   XY   BG  15.0      Apr
2   XY   BG  16.0      Mar
4   XA   AA  15.5      Apr
5   XA   AA  16.2      Mar
8   TX   AC  11.0      Mar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...