下采样到季度级别并在 Pandas 中获取季度结束日期值

Posted

技术标签:

【中文标题】下采样到季度级别并在 Pandas 中获取季度结束日期值【英文标题】:Downsample to quarter level and get quarter end date value in Pandas 【发布时间】:2022-01-07 01:11:43 【问题描述】:

我的数据框从 2005-01-01 到 2021-10-31 的每日价值。

            | C1     | C2
-----------------------------
2005-01-01  | 2.7859 | -7.790
2005-01-02  |-0.7756 | -0.97
2005-01-03  |-6.892  | 2.770
2005-01-04  | 2.785  | -0.97
.           .         .
.           .         .
2021-10-28  | 6.892  | 2.785
2021-10-29  | 2.785  | -6.892  
2021-10-30  |-6.892  | -0.97
2021-10-31  |-0.7756 | 2.34

我想对该数据框进行下采样以获得四分之一值,如下所示。

            | C1     | C2
------------------------------
2005-03-01  | 2.7859 | -7.790
2005-06-30  |-0.7756 | -0.97
2005-09-30  |-6.892  | 2.770
2005-12-31  | 2.785  | -0.97

我尝试使用 Pandas 重采样方法,但它需要聚合方法。

df = df.resample('Q').mean()

我不想要聚合值,我想要季度结束日期的当前值。

【问题讨论】:

你的意思是 2005-03-31 吗? @anarchy,我找不到你。我希望将每日价值数据框过滤到季度末日期行。 看你的例子,你写的是2005-03-01,那是三月的第一天,应该是2005-03-31吧?看看我的回答 【参考方案1】:

您的代码可以正常工作,除非您没有使用正确的功能。将mean 替换为last

dti = pd.date_range('2005-01-01', '2021-10-31', freq='D')
df = pd.DataFrame(np.random.random((len(dti), 2)), columns=['C1', 'C2'], index=dti)

dfQ = df.resample('Q').last()
print(dfQ)

# Output:
                  C1        C2
2005-03-31  0.653733  0.334182
2005-06-30  0.425229  0.316189
2005-09-30  0.055675  0.746406
2005-12-31  0.394051  0.541684
2006-03-31  0.525208  0.413624
...              ...       ...
2020-12-31  0.662081  0.887147
2021-03-31  0.824541  0.363729
2021-06-30  0.064824  0.621555
2021-09-30  0.126891  0.549009
2021-12-31  0.126217  0.044822

[68 rows x 2 columns]

【讨论】:

【参考方案2】:

你可以这样做,

df = df[df.index.is_quarter_end]

您将仅在每个季度末过滤掉日期。

【讨论】:

有效吗? @sekinod @anarchy。您的代码没有给出最后日期(2021-12-31),我不明白为什么......在我的示例上试试。 FIY,这里不需要.loc @sekinod 是的,我不应该在这里添加 .loc,我的代码现在可以工作了吗?

以上是关于下采样到季度级别并在 Pandas 中获取季度结束日期值的主要内容,如果未能解决你的问题,请参考以下文章

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)筛选dataframe数据中日期对象是所在季度第一天的数据行

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的最后一天(is quarter end)筛选dataframe数据中日期对象是所在季度最后一天的数据行

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)

* 获取本周本季度本月上月的开始日期结束日期

JS获取本周本季度本月上月的开始日期结束日期