Python 按不连续月份过滤数据帧的最简单方法是什么?

Python 按不连续月份过滤数据帧的最简单方法是什么?,python,pandas,datetime,Python,Pandas,Datetime,例如,我有2019年1月至2020年7月的数据。我想筛选2019年(1月、5月、8月、9月、12月)和2020年(1月、5月、6月)的数据 做这件事的简单方法是什么 编辑:它是一个日期时间列这里有一种使用合成数据的方法: dates = pd.date_range("2019-01-01", "2020-07-31", freq="23d") df = pd.DataFrame({"date": dates, &qu

例如,我有2019年1月至2020年7月的数据。我想筛选2019年(1月、5月、8月、9月、12月)和2020年(1月、5月、6月)的数据

做这件事的简单方法是什么


编辑:它是一个日期时间列

这里有一种使用合成数据的方法:

dates = pd.date_range("2019-01-01", "2020-07-31", freq="23d")
df = pd.DataFrame({"date": dates, "a": range(len(dates))})
mask = (df.date.dt.month.isin([1, 5, 6, 7, 12]) & (df.date.dt.year == 2019)) |  \
       (df.date.dt.month.isin([1, 5, 6]) & (df.date.dt.year == 2020))
df[mask]
输出为:

         date   a
0  2019-01-01   0
1  2019-01-24   1
6  2019-05-19   6
7  2019-06-11   7
8  2019-07-04   8
9  2019-07-27   9
15 2019-12-12  15
16 2020-01-04  16
17 2020-01-27  17
22 2020-05-21  22
23 2020-06-13  23

有一些方法可以获取月份和年份,您可以将其形成一个元组,或者只存储为两列。在这之后,它与您在pandas中执行的常规筛选相同。也许可以将以下函数逻辑应用到存储月份-年份元组的列上

def monthmask(month_year):
    list = [...]  # List of tuples containing your desired months and years

    if month_year in list:
        return False
    else:
        return True

这在很大程度上取决于数据的存储方式。它是DatatimeIndex吗?是Datetime的多索引吗?是字符串列吗?是Datetime列吗?你能分享你的数据片段吗?你看到了吗?您好,请花点时间阅读:如何提供一个索引并相应地修改你的问题。这篇文章可能有助于这样做:这是否回答了你的问题?