繁体   English   中英

使用一列月份过滤熊猫数据框以保留最近的 n 个月

[英]Filtering a pandas data frame using a column of months to keep the most recent n months

我有一个以月份为一列的熊猫数据框。 我在下面给出了一个小样本:

   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)

我们现在是四月,所以我们有,

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

不同的布局,通过使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM