如何为DataFrame创建季度内天数统计列day_of_quarter?
计算DataFrame中日期的季度内已过天数
方法一:直接使用Pandas内置属性(最简便)
Pandas的datetime64类型自带dayofquarter属性,无需手动标记季度起始日就能直接获取季度内天数:
import pandas as pd # 示例数据 data = { 'dates': [pd.Timestamp('2003-06-29'), pd.Timestamp('2003-06-30'), pd.Timestamp('2003-07-01'), pd.Timestamp('2003-07-02')], 'is_quarter_begin': [False, False, True, False] } df = pd.DataFrame(data) # 直接生成季度内天数列 df['day_of_quarter'] = df['dates'].dt.dayofquarter
执行后输出结果:
| dates | is_quarter_begin | day_of_quarter |
|---|---|---|
| 2003-06-29 | False | 90 |
| 2003-06-30 | False | 91 |
| 2003-07-01 | True | 1 |
| 2003-07-02 | False | 2 |
方法二:基于已有的is_quarter_begin列计算
如果需要严格按照你标记的季度起始日划分区间,可以通过分组累加实现:
import pandas as pd # 示例数据 data = { 'dates': [pd.Timestamp('2003-06-29'), pd.Timestamp('2003-06-30'), pd.Timestamp('2003-07-01'), pd.Timestamp('2003-07-02')], 'is_quarter_begin': [False, False, True, False] } df = pd.DataFrame(data) # 生成季度分组键:每遇到一个季度起始日,分组编号加1 df['quarter_group'] = df['is_quarter_begin'].cumsum() # 每个分组内从1开始逐日计数 df['day_of_quarter'] = df.groupby('quarter_group').cumcount() + 1 # 可选:删除临时分组列 df = df.drop('quarter_group', axis=1)
该方法完全依赖你自定义的is_quarter_begin标记,适合非标准季度划分的场景。
内容的提问来源于stack exchange,提问作者granadallama
相关产品推荐
相关产品推荐

