gpt4 book ai didi

python - 如何使用字典将开始日期和结束日期翻译为一段时间,例如 jan-dec 是日历年

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:51 26 4
gpt4 key购买 nike

我有一个数据框,其中一段时间​​的开始日期和结束日期为yyyy-mm,我想要一个新列,其中包含一段时间 - 例如开始新列中 2019-01 的日期和 2019-12 的结束日期将是 Cal-19,想要保留此多年并且季度,然后如果不是其中任何一个,则将 mm-yyyy - mm-yyyy 作为开始到结束日期的字符串。

我尝试使用字典来执行此操作,该字典有两个输入(开始日期和结束日期),并且会有该期间的输出,但这没有奏效。

from Dictionary import Period

df["Start Period"]=pd.to_datetime(df["Start Date"], dayfirst=True).dt.to_period("M")

df["End Period"]=pd.to_datetime(df["End Date"], dayfirst=True).dt.to_period("M")

df["Period"] = df["Start Period"].map(Period) #This is the line which isn't working

其中Period是一个字典,如下:

Period = dict({("2019-01","2019-12"):"Cal-19",
("2020-01","2020-12"):"Cal-20",
("2021-01","2021-12"):"Cal-21",
("2019-01","2019-03"):"Q1-19",
("2019-04","2019-06"):"Q2-19",
("2019-07","2019-09"):"Q3-19",
("2019-10","2019-12"):"Q4-19",
("2020-01","2020-03"):"Q1-20",
("2020-04","2020-06"):"Q2-20",
("2020-07","2020-09"):"Q3-20"})

本希望获得句点,但在字典本身中出现错误,但即使在尝试一小部分数据时,我也会在输出列中得到 NaN

最佳答案

我假设开始日期结束日期中的日期是字符串格式。否则下面的代码需要调整。这应该可以解决问题:

def get_period_form_start_and_end(x):
yr_start = x['Start Date'][0:4]
yr_end = x['End Date'][0:4]
m_start = x['Start Date'][5:7]
m_end = x['End Date'][5:7]

if yr_start == yr_end:
if m_start == "01" and m_end == "12":
return "Cal-" + yr_start[2:4]
elif m_start == "01" and m_end == "03":
return "Q1-" + yr_start[2:4]
elif m_start == "04" and m_end == "06":
return "Q2-" + yr_start[2:4]
elif m_start == "07" and m_end == "09":
return "Q3-" + yr_start[2:4]
elif m_start == "10" and m_end == "12":
return "Q4-" + yr_start[2:4]
else:
return "{} - {}".format(x['Start Date'], x['End Date'])

df.loc[:, 'Period'] = df.loc[: , ['Start Date', 'End Date']].apply(lambda x: get_period_form_start_and_end(x), axis=1)

因此,首先我们定义一个函数来处理它是什么类型的周期,然后我们将该函数应用于 DataFrame 中的相关列。

关于python - 如何使用字典将开始日期和结束日期翻译为一段时间,例如 jan-dec 是日历年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56342503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com