Python 查找日期之间的月份

Python 查找日期之间的月份,python,pandas,Python,Pandas,我有一个大的数据框,有两列-开始日期和结束日期,日期为字符串格式。f、 e.“2018-06-01” 我想创建第三列,列出两个日期之间的月份。 因此,如果我在第三栏中有一个开始日期——“2018-06-01”,结束日期——“2018-08-01”,我希望[“2018-06-01”,“2018-07-01”,“2018-08-01”]。这一天对我来说无关紧要,所以我们可以删除它。 我找到了很多方法来处理简单字符串,但没有人可以处理pandas数据帧。pandas有一个名为apply的函数,它允许您

我有一个大的数据框,有两列-开始日期和结束日期,日期为字符串格式。f、 e.“2018-06-01” 我想创建第三列,列出两个日期之间的月份。 因此,如果我在第三栏中有一个开始日期——“2018-06-01”,结束日期——“2018-08-01”,我希望[“2018-06-01”,“2018-07-01”,“2018-08-01”]。这一天对我来说无关紧要,所以我们可以删除它。
我找到了很多方法来处理简单字符串,但没有人可以处理pandas数据帧。

pandas
有一个名为
apply
的函数,它允许您将逻辑应用于
数据帧的每一行

我们可以使用
dateutil
获取开始日期和结束日期之间的所有月份,然后将逻辑作为新列应用于
dataframe
的每一行

import pandas as pd
import time
import datetime
from dateutil.rrule import rrule, MONTHLY

#Dataframe creation, this is just for the example, use the one you already have created.
data = {'start': datetime.datetime.strptime("10-10-2020", "%d-%m-%Y"), 'end': datetime.datetime.strptime("10-12-2020", "%d-%m-%Y")}
df = pd.DataFrame(data, index=[0])

#df
#       start        end
#0 2020-10-10 2020-12-10

# Find all months between the start and end date, apply to every row in the dataframe. Result is a list.

df['months'] = df.apply(lambda x: [date.strftime("%m/%Y") for date in rrule(MONTHLY, dtstart=x.start, until=x.end)], axis = 1)

#df
#       start        end                       months
#0 2020-10-10 2020-12-10  [10/2020, 11/2020, 12/2020]

这可能会帮助你找到所有的月份。仅在响应代码中而不是
freq='D'
,您应该放置
freq='M'