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)
。