看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pd.date_range
是 pandas 库中用于生成日期范围的函数。它的主要用途是创建一个由日期组成的序列,方便在时间序列分析和处理中使用。今天我们看看它的一个应用。
我们的源数据如下:
import pandas as pd
import io
data = '''
n_times interval_days date
3 4 03-01
1 4 03-02
2 5 03-05
4 3 03-07
'''
df = pd.read_csv(io.StringIO(data), sep=r'\s+')
df
# ...
其中 date 是日期,它是一个字符串,interval_days 是要扩展的日期的间隔天数,n_times 是期数。
要将这个数据根据 interval_days 和 n_times 进行扩展,得到一个完成的时序数据。结果即:
'''
n_times interval_days date_range
3 4 2024-03-01
3 4 2024-03-05
3 4 2024-03-09
1 4 2024-03-02
2 5 2024-03-05
2 5 2024-03-10
4 3 2024-03-07
4 3 2024-03-10
4 3 2024-03-13
4 3 2024-03-16
'''
要将源数据进行扩展,就会想到使用 explode()
方法来爆炸数据,进行爆炸的前提就需要有一个等待展开的时间序列,这个序列就是根据 interval_days 和 n_times 生成的的时间范围数据,我们可以用顶级方法 pd.date_range()
来完成的数据的构造。
根据思路,我们的最终代码是:
def func(ser: pd.Series) -> pd.DatetimeIndex:
return pd.date_range(
start=f'2024-{ser.date}',
periods=ser.n_times,
freq=f'{ser.interval_days}D'
)
(
df.assign(date_range=df.apply(func, axis=1))
.explode('date_range')
)
'''
n_times interval_days date date_range
0 3 4 03-01 2024-03-01
0 3 4 03-01 2024-03-05
0 3 4 03-01 2024-03-09
1 1 4 03-02 2024-03-02
2 2 5 03-05 2024-03-05
2 2 5 03-05 2024-03-10
3 4 3 03-07 2024-03-07
3 4 3 03-07 2024-03-10
3 4 3 03-07 2024-03-13
3 4 3 03-07 2024-03-16
'''
这样就完成了这个需求。
(完)
更新时间:2024-08-18 16:22:34 标签:pandas python 间隔 周期