Python 是否基于月份从数据框中删除列?

Python 是否基于月份从数据框中删除列?,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有两列df-“投资组合”和“日期”(datetime.DATE(2018,9,19))格式。 我正在尝试删除当前月份和上个月的行,即,如果当前月份为March,则应删除“Jan”和“Feb”数据。 同样,如果当月为2020年2月,则应删除“2020年1月”和“2019年12月”数据。 示例:df PORTFOLIO DATE 0 A 2018-09-19

我有两列df-“投资组合”和“日期”(datetime.DATE(2018,9,19))格式。 我正在尝试删除当前月份和上个月的行,即,如果当前月份为
March
,则应删除“Jan”和“Feb”数据。 同样,如果当月为2020年2月,则应删除“2020年1月”和“2019年12月”数据。 示例:df

                          PORTFOLIO  DATE
                        0   A       2018-09-19
                        1   B       2018-03-09
                        2   C       2019-03-09
                        3   D       2020-01-02
                        4   E       2020-01-17
                        5   F       2020-02-09
                        6   G       2020-03-15
                        7   H       2019-10-05
                        8   I       2018-03-09
                        9   J       2020-01-21
                        10  K       2019-03-08
                        11  L       2019-02-12
                        12  M       2020-03-01
                        13  N       2020-02-16
我的结论是:

                          PORTFOLIO  DATE
                        0   A       2018-09-19
                        1   B       2018-03-09
                        2   C       2019-03-09
                        3   D       2020-01-02
                        4   E       2020-01-17
                        5   H       2019-10-05
                        6   I       2018-03-09
                        7   J       2020-01-21
                        8   K       2019-03-08
                        9   L       2019-02-12

我认为您需要使用为今天创建的月份周期
period
,列值通过类似的方式进行转换,并通过减去1和2 in来测试前两个周期,因此可以通过使用
~
的反转掩码进行过滤,并且:

类似的解决方案,如果需要一些范围,默认情况下包括在内,那么也要过滤
now-1
now
值:

df = df[~df['DATE'].dt.to_period('m').between(now-1, now)]
print (df)
   PORTFOLIO       DATE
0          A 2018-09-19
1          B 2018-03-09
2          C 2019-03-09
3          D 2020-01-02
4          E 2020-01-17
7          H 2019-10-05
8          I 2018-03-09
9          J 2020-01-21
10         K 2019-03-08
11         L 2019-02-12

我想你应该改变标题。。。误导,因为您正在删除行而不是列。学究我知道,但它是什么,它是本月的数据也应该被排除在外。G和M日期是从当前月份开始的
df = df[~df['DATE'].dt.to_period('m').between(now-1, now)]
print (df)
   PORTFOLIO       DATE
0          A 2018-09-19
1          B 2018-03-09
2          C 2019-03-09
3          D 2020-01-02
4          E 2020-01-17
7          H 2019-10-05
8          I 2018-03-09
9          J 2020-01-21
10         K 2019-03-08
11         L 2019-02-12