我有一个带有两列的大型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进行处理。
答案 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]