查找日期之间的月份熊猫

时间:2020-09-04 13:44:53

标签: python pandas

我有一个带有两列的大型DataFrame-start_date和finish_date,其中日期为字符串格式。 f.e. “ 2018-06-01” 我想创建第三列,其中包含两个日期之间的月份列表。 因此,如果我有一个开始日期-“ 2018-06-01”,结束日期-“ 2018-08-01”,则在第三列中,我希望[“ 2018-06-01”,“ 2018-07-01”,“ 2018-08-01“]。一天对我来说并不重要,因此我们可以将其删除。 我发现有很多方法可以对简单的字符串进行处理,但是没有人可以对pandas DataFrame进行处理。

1 个答案:

答案 0 :(得分:0)

Pandas具有一个名为apply的功能,可让您将逻辑应用于dataframe的每一行。

我们可以使用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]