Python 如何从熊猫数据框中的月份列表中获取所有季节?

Python 如何从熊猫数据框中的月份列表中获取所有季节?,python,pandas,list,algorithm,Python,Pandas,List,Algorithm,我正在分析一个数据集,在那里我有医学训练营的信息。 从这个训练营的开始日期和结束日期(天/月/年)开始,我创建了一个函数,其中列出了开始日期和结束日期之间的所有月份 import datetime from dateutil.rrule import rrule, MONTHLY def list_months_in_date(start_date: datetime, end_date : datetime) -> list : strt_dt = datetime.datet

我正在分析一个数据集,在那里我有医学训练营的信息。 从这个训练营的开始日期和结束日期(天/月/年)开始,我创建了一个函数,其中列出了开始日期和结束日期之间的所有月份

import datetime
from dateutil.rrule import rrule, MONTHLY

def list_months_in_date(start_date: datetime, end_date : datetime) -> list :
    strt_dt = datetime.datetime.strptime(start_date, "%d-%b-%y")
    end_dt = datetime.datetime.strptime(end_date, "%d-%b-%y")
    dates = [dt for dt in rrule(MONTHLY, dtstart=strt_dt, until=end_dt)]
    distinct_months = []
    months = [date.strftime("%B") for date in dates if date.strftime("%B") not in distinct_months]
    distinct_months = list(set(months))

    return distinct_months 
我的功能是从一系列日期中获取季节

def list_months_to_season(distinct_months : list) -> list:
    season = []
    autumn = ["September","October","November"]
    winter = ["December","January","February"]
    summer = ["June","July","August"]
    spring = ["March","April","May"]
    for month in distinct_months:
        if month in autumn :
            season.append("autuumn")
        if month in winter :
            season.append("winter")
        if month in spring :
            season.append("spring")
        if month in summer :
            season.append("summer")
    
    return season
我需要的是获取开始日期和结束日期之间的季节(夏、春、冬、秋) 为了拥有

|id_medicalcamp|start_date|end_date  |seasons      |
|    0010      |01/06/2019|01/09/2020|summer,autumn|  
我正在运行以下代码

df_med_camps['season_label'] = df_med_camps.apply(lambda data : list_months_in_date(data["Camp_Start_Date"],data["Camp_End_Date"]))

这给了我error key error:“Camp\u Start\u Date”

首先将日期转换为
Datetime
,然后创建
dict
季节和
map
按月:

df["start_date"] = pd.to_datetime(df["start_date"], format="%d/%m/%Y")
df["end_date"] = pd.to_datetime(df["end_date"], format="%d/%m/%Y")

s = {6:"Summer", 7:"Summer", 8:"Summer", 9:"Autumn", 10: "Autumn"} #...

df["label"] = df.filter(like="date").apply(lambda d: d.dt.month.map(s)).agg(", ".join, axis=1)

print (df)

   id_medicalcamp start_date   end_date           label
0              10 2019-06-01 2020-09-01  Summer, Autumn

使用
pd.Series.dt.month
获取月数,然后直接使用
map
进行季节划分。不需要创建自定义函数。也许我理解你的意思,但是如何将列表放入列season_label?对于正在查看此问题的用户,需要做一点更正:03年8月16日的正确格式为“%d-%b-%y”。您没有提供示例数据,因此我使用的是预期输出,即
%m
。对于重复季节,可以使用
…agg(lambda d:,”。join(d.unique()),axis=1)