提问人:user308827 提问时间:11/15/2023 更新时间:11/15/2023 访问量:33
在 Python 中将 Dekad 转换为开始和结束日期
Convert Dekad to start and end date in Python
问:
我有一个 pandas 数据帧,其中包含一个包含 Dekad(10 天)信息的列,例如 Dekad 1 是 1 月 1 日至 1 月 10 日,Dekad 2 是 1 月 11 日至 1 月 20 日,依此类推。
有没有办法在给定 dekad 号码的情况下获取开始和结束日期信息?我可以通过硬编码来做到这一点,但更像 python 的解决方案会更好。
数据帧看起来像这样,我想添加一个名为 date_range_dekad 的新列,其中包含连接成一个字符串的开始和结束日期
CEI Dekad
0 160.004352 1
1 0.000000 2
2 0.000000 3
3 0.000000 4
4 0.000000 5
答:
1赞
Timeless
11/15/2023
#1
使用interval_range
的一个可能选项:
dekad = 10
rng = pd.interval_range(
pd.Timestamp("20230101"), pd.Timestamp("20231231"), freq=f"{dekad-1}D")
df["date_range_dekad"] = [
"{:%d-%b} to>> {:%d-%b}".format(
*(rng[dk].left, rng[dk].right) if dk == 0 # to be adjusted ?
else (rng[dk].left + pd.Timedelta(days=dk),
rng[dk].right + pd.Timedelta(days=dk)))
for dk in df["Dekad"].sub(1)
]
或者,通过切片date_range
:
rng = pd.date_range("20230101", "20231231", freq="1D")
df["date_range_dekad"] = [
"{:%d-%b} to>> {:%d-%b}".format(
rng[dekad*dk:dekad*(dk+1)].min(),
rng[dekad*dk:dekad*(dk+1)].max())
for dk in df["Dekad"].sub(1)
]
输出:
print(df)
CEI Dekad date_range_dekad
0 160.004352 1 01-Jan to>> 10-Jan
1 0.000000 2 11-Jan to>> 20-Jan
2 0.000000 3 21-Jan to>> 30-Jan
3 0.000000 4 31-Jan to>> 09-Feb
4 0.000000 5 10-Feb to>> 19-Feb
评论