python - 如何使用字典将开始和结束日期转换为一段时间,例如 jan-dec 是日历年
问题描述
我有一个数据框,其中包含一段时间的开始日期和结束日期,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
在输出列中得到的一小部分数据时也是如此。
解决方案
您需要通过列表理解对所有带有 dict 值的句点组合进行展平字典period_range
:
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"})
d = {x:v for (k1,k2), v in Period.items() for x in pd.period_range(k1, k2, freq='M')}
df = pd.DataFrame({'Start Period': pd.period_range('2019-01', '2020-09', freq='M')})
#map by dictioanry d
df["Period"] = df["Start Period"].map(d)
print (df)
Start Period Period
0 2019-01 Q1-19
1 2019-02 Q1-19
2 2019-03 Q1-19
3 2019-04 Q2-19
4 2019-05 Q2-19
5 2019-06 Q2-19
6 2019-07 Q3-19
7 2019-08 Q3-19
8 2019-09 Q3-19
9 2019-10 Q4-19
10 2019-11 Q4-19
11 2019-12 Q4-19
12 2020-01 Q1-20
13 2020-02 Q1-20
14 2020-03 Q1-20
15 2020-04 Q2-20
16 2020-05 Q2-20
17 2020-06 Q2-20
18 2020-07 Q3-20
19 2020-08 Q3-20
20 2020-09 Q3-20
推荐阅读
- c# - 在新选项卡中打开 URL 字符串以单击它加载的图像,无法读取 URL 字符串
- python - Pandas DataFrame - 规范化
- react-native - 使用 Detox 测试 Switch 组件 - 点击会影响之前的 toHaveValue() 测试
- python - 如何将参数传递给 Pytest 中的 Selenium 测试函数?
- svn - 如何在 tgz 文件中添加修订号 svn?
- python - 以编程方式编写 .pypirc 文件
- sql - 具有两个变化属性的 SQL 数据库结构
- c# - 在 Net Core 2.2 中积极验证后如何更新我自己的令牌过期时间?
- ios - TableView 不显示 Firebase 数据库中的数据
- php - PHP 从数据中提取所有可能的组合