如何为时间序列索引的Pandas DataFrame添加月内递增列
为时间序列DataFrame添加月度递增列
问题背景
给定一个以日期为索引的pandas DataFrame,示例生成代码如下:
import pandas as pd import numpy as np index = pd.date_range('2023-01-01', '2023-12-31', freq='1D') df = pd.DataFrame({'a' : np.random.randint(0, 10, len(index))}, index=index)
示例数据如下:
a 2023-01-01 3 2023-01-02 2 2023-01-03 1 2023-01-04 3 2023-01-05 8 ... .. 2023-12-27 2 2023-12-28 2 2023-12-29 0 2023-12-30 1 2023-12-31 7
需要添加新列b,使其在每个日历月内呈现递增模式,满足公式:b = 当月日期数 / 当月总天数,最终输出示例如下:
a b 2023-01-01 0 0.032258 2023-01-02 5 0.064516 2023-01-03 2 0.096774 2023-01-04 7 0.129032 2023-01-05 4 0.161290 ... .. ... 2023-12-27 6 0.870968 2023-12-28 5 0.903226 2023-12-29 8 0.935484 2023-12-30 2 0.967742 2023-12-31 9 1.000000
实现方法
利用pandas的DatetimeIndex属性可直接提取所需数据,快速生成目标列:
# 提取当月日期数与当月总天数,计算得到列b df['b'] = df.index.day / df.index.days_in_month
细节说明
df.index.day:从日期索引中提取每个日期对应的当月第几天(取值范围为1到该月最后一天)df.index.days_in_month:提取每个日期所在月份的总天数(自动处理平闰年、不同月份天数差异)- 两值相除后,每个月的序列会从
1/当月天数开始,逐日递增至1,完全符合需求
内容的提问来源于stack exchange,提问作者William Miller
相关产品推荐
相关产品推荐

